postgresの最大接続数を増やす方法は?


108

私の製品にはPostgres DBを使用しています。スリック3を使用してバッチ挿入を実行しているときに、エラーメッセージが表示されます。

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

私のバッチ挿入操作は、数千を超えるレコードになります。私のpostgresの最大接続は100です。

最大接続数を増やす方法は?



pgBouncerやpgPoolなどの接続プールを使用してください
フランクハイケンズ

2
1.最初に、ミドルウェアが開いている接続の数が多すぎないか、または接続がリークしていないかを確認します。2.(たぶん)次に接続プーラーを使用します。3.(ほとんど)このタイプの問題で許可される接続の数を決して増やしないでください。ほとんどの場合、これは事態を悪化させます。(あなたが絶対に確信がある場合を除いて)
joop 2015年

回答:


219

増やすだけで max_connectionsはいけません。あなたも増加する必要がshared_buffersありkernel.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を搭載したシステムの場合、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再起動すると有効になります(次の行でカーネルを最大にします96Mb

kernel.shmmax=100663296

参考文献

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

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


素晴らしい答え。いくつかの質問.. 100663296はどのように96MBに等しいですか?なぜshmmaxを変更するのですか?
Robbo_UK 2018年

3
100663296バイト= 96 MB(バイナリ)。shmmaxは、共有メモリセグメントの最大サイズです。共有バッファのサイズを増やしたので、キャッシュ用に増加したメモリに対応するためにshmmaxを変更する必要があります。
Ankit

1
@Robbo_UK 96 * 1024 * 1024 = 100663296
skrebbel

6
PGTuneを使用して、システムのこれらの設定を決定することができます
Yoan Tournade

11
cat /proc/sys/kernel/shmmax変更する前に、現在のkernel.shmmax設定()を確認してください。最近のシステムでは、それはすでに途方もなく高く設定されており、変更すべきではありません。マインは18446744073692774399Ubuntu 18.04ではデフォルトで設定されています。
カール・Zulauf

30

ウィニーの素晴らしい答えに加えて、

セットアップでpostgresql.confファイルの場所を見つけられない場合は、いつでもpostgres自体に問い合わせることができます。

SHOW config_file;

私にとっては、max_connectionsを変更するだけでうまくいきました。


2
ありがとうございました。Ubuntu 18.04の場合/etc/postgresql/11/main/postgresql.conf
gies0r

1

/ var / lib / pgsql / dataまたは/ usr / local / pgsql / data /にあるpostgresql.confファイルのmax_connections変数を変更します


2
なぜpg_hba.confなのですか?接続数に関するパラメータはなく、接続方法のみが含まれます。一方、postgresql.conf ....しかし、何百もの接続はお勧めできません。実行しないでください。接続プールを使用するか、パフォーマンスの問題が発生します。PostgreSQL 8.3は長年EOLです。最新バージョンを使用してください。
フランクハイケンズ2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.