問題タブ [pgbouncer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - マルチプロセス pgbouncer プーリング: 利用可能な接続が不足しています
私のセットアップ:
postgresql.conf: max_connections = 100
pgbouncer 設定:
私はdjangoアプリケーション(サイトアプリケーションだけでなく、高負荷マルチスレッド解析メカニズムも)から一連のdjango管理コマンド(別のプロセスとして実行される)を使用しており、正常に動作します(ただし、ほとんどの場合、一度に 1 つのコマンドのみを実行すると、アクティビティの突然のスプラッシュ) が発生し、一度に 2 つのコマンドを実行すると、多くの「接続が不十分です」というエラーが発生します。
何をすべきか?
postgresql - postgres+pgbouncer を設定して多数の接続を許可する方法
私は 5000 接続で pgbouncer のストレス テストを行っています。テストの目的は、pgbouncer を使用して接続を多重化することです。つまり、5000 クライアント接続を 500 db 接続に多重化します。
しかし、アクティブ500接続マークの目標を達成できません。
私のセットアップはかなり簡単です
(pgbenchで設定したクライアント) ----->pgbouncer + psql
|______複数の箱______||______1箱__________|
pgbouncer と postgres は同じボックスに含まれています。
pgbouncer=1コア(想定)
postgres = 15 コア (予想)
マシン構成:
16コア
ulimit -n 10000
Postgres 構成:
最大接続数 = 500
共有バッファ = 1GB
work_mem = 100kB
pgbouncer 構成:
pool_mode = トランザクション
server_lifetime=6000
server_idle_timeout=2000
server_connect_timeout=30
default_pool_size=500
プールサイズ=500
pkt_buf=4096
server_login_retry=2
クライアント構成(各 8 コアの 8 ボックス):
各クライアント ボックスは、pgbench を使用するクライアント用のセットとして模倣します 8 コア ボックスの場合、クエリを実行するために 16 のスレッドを設定します
pgbench -h -p 6541 -c -j 16 -d -f pgbench_Script.sql -T 360 -U postgres テスト
pgbench_Script.sql
\setrandom delta 0 100000 insert into t4.emplog values(nextval('t4.employeeSeq'),:delta);
postgres でのアクティブなクエリ:
私の期待では、接続プーラーを介してデータベースへのアクティブな接続が 500 近くあると予想されます。 問題: 一握りの接続しか表示されない ~ 40 のアクティブな接続
観測: 複数の postgres プロセスが「アイドル」状態になっているのが見えますが、pgbouncer にはすべてのクライアントがサービスされています。pgbouncer が最高のパフォーマンスを発揮できないことを示唆しています。ただし、正確なボトルネックを特定することはできません。
潜在的なボトルネック:
クライアントの要求: pgbench は各スレッドを接続上のセットのマスターにします。アクティブな同時接続の大規模なセットをどのように模倣できますか?
pgbouncer : pgbouncerの構成に問題がありますか?
postgres : postgresの私の構成は大規模な接続を処理できませんか?
spring - dbcp + spring + hibernate + jdbcで準備済みステートメントを無効にしますか?
現在、Spring と Hibernate を使用するアプリケーションを拡張しています。アプリケーションが準備済みステートメントを介してデータベース (postgres) と通信するインスタンスが複数あります。これまでのアプリケーションは、dbcp 経由で postgres と通信していました。
変更: アプリケーションは、pgbouncer を介して postgres と通信するようになりました。
つまり、アプリケーション -> dbcp -> pgbouncer -> postgres
これが最も理想的な解決策ではないことは理解しています。つまり、2つのプーラーを持つことです。しかし、現在のアーキテクチャのため、両方が必要です。
要件: pgbouncer はトランザクションモードでのプリペアド ステートメントをサポートしていないため、削除する必要があります。
準備済みステートメントを削除するための変更。
1) psql: バージョン = 9.2.6
変化なし
2) pgbouncer: 構成ファイルで、次の属性を設定します。
3) jdbc : 準備されたしきい値は、それに応じて設定されています。すなわち:jdbc:postgresql://localhost:6541/postgres?prepareThreshold=0
4) dbcp : poolPreparedStatements = false maxOpenPreparedStatements = 0
5) 休止状態:変更なし
6) 春 :変更なし
問題:
これらすべての変更にもかかわらず、準備されたステートメントが作成されようとしており、そのためにトランザクションが失敗しているのをまだ見ています。
「エラー: 準備されたステートメント "S_21" は存在しません; ネストされた例外は org.postgresql.util.PSQLException: エラー: 準備されたステートメント "S_21 " は存在しません」
準備済みステートメントを使用したすべての論理変更を削除しました。
他の準備済みステートメントが作成されないようにするにはどうすればよいですか? spring または hibernate は、使用のために準備されたステートメントを内部的に作成しますか? はいの場合、それらを無効にするにはどうすればよいですか?
c# - postgresがsearch_pathパラメータを無視する
Npgsqlを使用して、pg_bouncerを介してpostgresデータベースに接続するC#アプリがあります。私の接続文字列には、SearchPath
. Npgsql はこれを取得search_path
し、起動パケットにパラメーターを設定します。
Pg_bouncer はそのパラメーターを好まないようですsearch_path
。これにより、初期接続が失敗します ( Unsupported startup parameter: search_path
)。これを回避するために、pg_bouncer の ignore_startup_parameters リストにリストしました。
接続はデータベースに正常に到達するようになりましたが、接続文字列で宣言された SearchPath は完全に無視されます。現在、すべてのクエリは、正しいスキーマをヒットする代わりに、パブリック スキーマから選択します。
Postgres に SearchPath を再度尊重させるにはどうすればよいですか?
postgresql - UNIXソケットを使用してpostgresql / pgbouncerを構成する方法は?
pgbouncer / postgresql
デフォルトの UNIX ソケットを使用して最も単純なコンボを機能させることはできません。
としてログインしfoo
、既存のデータベース ( によって作成されたfoo
)を使用しbar
ます。これらは正常に動作します:
で/etc/pgbouncer/userlist.txt
:
で/etc/pgbouncer/pgbouncer.ini
:
psql -p 6432 mydb
または でログインしようとするとpsql -p 6432 mydb --password
、パスワードを入力した後、
postgresql - 教義。準備ステートメントをオフにする
私は自分のプロジェクトでdoctrineでsymfony2を使用しています。
すべての SQL クエリの準備ステートメントをオフにするにはどうすればよいですか?
PostgreSQL接続にpgbouncerを使用し、prepareステートメントがサポートされていないため、必要です。