1. ホーム
  2. postgresql

[解決済み] Postgresの最大接続数を増やすには?

2022-03-02 14:29:39

質問

私は製品にPostgres DBを使用しています。slick 3を使用してバッチ挿入を行う際に、エラーメッセージが表示されます。

org.postgresql.util.PSQLException: FATAL: 申し訳ありませんが、すでにクライアントが多すぎます。

私のバッチ挿入操作は、数千レコード以上になります。 私のPostgresの最大接続数は100です。

最大接続数を増やすにはどうしたらいいですか?

解決方法は?

増やすだけ max_connections はまずい。を増やす必要があります。 shared_bufferskernel.shmmax にも対応しています。


配慮事項

max_connections は、データベースサーバーへの同時接続の最大数を決定します。デフォルトは通常100接続です。

接続数を増やす前に、デプロイメントをスケールアップする必要がある場合があります。しかし、その前に、本当に接続数の上限を増やす必要があるかどうかを検討する必要があります。

PostgreSQLの各接続は、接続の管理またはそれを使用するクライアントのためにRAMを消費します。接続数が多ければ多いほど、データベースの実行に使用できるはずのRAMがより多く使用されることになります。

よくできたアプリは、通常、大量の接続を必要としません。もし、多数の接続を必要とするアプリがある場合は、次のようなツールの使用を検討してください。 pg_bouncer これは接続をプールしてくれるものです。各接続はRAMを消費するので、その使用量を最小限にすることを考える必要があります。


最大接続数を増やす方法

1. 増加 max_connectionshared_buffers

/var/lib/pgsql/{version_number}/data/postgresql.conf

変化

max_connections = 100
shared_buffers = 24MB

になります。

max_connections = 300
shared_buffers = 80MB

shared_buffers 設定パラメータは メモリ 専用 に使用するためにPostgreSQLに <強い キャッシュデータ .

  • 1GB以上のRAMを搭載しているシステムであれば、1GB以上のRAMを搭載しているシステムであれば、1GB以上のRAMを搭載していないシステムであっても shared_buffers の値は、システム内のメモリの 1/4 です。
  • 40%以上のRAMを使用した方が良いということはまずないでしょう。 より少ない量(25%など)よりも
  • システムまたはPostgreSQLのビルドが32ビットである場合、次のことに注意してください。 shared_buffers を 2 ~ 2.5GB 以上に設定することは現実的ではありません。
  • Windowsでは、shared_buffersに大きな値を設定しても、それほど効果がないことに注意してください。 比較的低い値にしておくとよいでしょう。 を使用し、代わりにOSのキャッシュをより多く使用します。Windows では 有効な範囲は 64MBから512MB .

2. kernel.shmmaxを変更する

カーネルの最大セグメントサイズを次のように増やす必要があります。 やや大きい よりも shared_buffers .

ファイル内 /etc/sysctl.conf を以下のように設定します。このパラメータが有効になるのは postgresql を再起動します(以下の行でカーネルmaxを 96Mb )

kernel.shmmax=100663296


参考文献

Postgres の最大接続数と共有バッファ数

PostgreSQLサーバーのチューニング