20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails / PostgreSQL の組み合わせで使ってる場合に、PostgreSQL のメモリ消費を劇的に減らす方法

Posted at

結論

答えは、 http://railsguides.jp/configuring.html#postgresql%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B に書いてある。

database.ymlprepared_statements: false または statement_limit: 100 (デフォルトが1000) を設定する。もちろん値は100でなくてもいい。

database.yml
production:
  adapter: postgresql
  prepared_statements: false

または

database.yml
production:
  adapter: postgresql
  statement_limit: 100

この値が大きいと、Rails側ではなく、データベース側に PreparedStatement のキャッシュがメモリに保存されるためデータベースのメモリをぐんぐん消費するのだ。

アプリの内容と相談し、 PreparedStatement キャッシュが少なくてよいなら減らすべき。
というかデフォルト 1000 は多すぎるような気がする。

このキャッシュは接続毎に効いてくるので App Server を複数台で冗長化してる場合などは劇的に効いてくる。というか、逆に言うとデフォルト設定だとApp Serverを増やすとあっという間にデータベースのメモリを消費してしまうことになる。

railsguide にシレっと載っている情報だが、案外ネットで見つかりにくい情報なので載せることにした。

20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?