LoginSignup
1
1

More than 5 years have passed since last update.

複数Railsアプリから単一PostgreSQLへアクセスする場合PreparedStatementに注意する

Posted at

問題点

複数のRailsアプリケーションから単一DBにアクセスする場合、以下の動作を行います。

  • ActiveRecordはデータベース接続ごとにPreparedStatementを作成します。
  • PostgreSQLはPreparedStatementをセッション毎にメモリに保持します。

その為、アプリケーションサーバの台数が増えたり、アプリケーションからのセッション数を増やしたりすると、DBのメモリを大幅に使用してしまいます。

対策

  • 保持するPreparedStatementの数を制限する。(デフォルトは1000件)
database.yml
defaults: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  # キャッシュする上限を設定
  statement_limit: 100
  • PreparedStatementの使用を無効にする。
database.yml
defaults: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  # 無効にする場合
  prepared_statements: false

参考

Rails Guide

PreparedStatementとは?

一言で言うと、DBが持っているクエリキャッシュ機能です。
https://www.postgresql.jp/document/pg820doc/html/sql-prepare.html

1
1
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
1
1