9

私は本番用にpostgres dbサーバーを使用しています。

postgresqlサーバーでクエリを実行するとselect * from pg_stat_activity、98%のクエリが取得され"SHOW TRANSACTION ISOLATION LEVEL"、postgresqlサーバーは100接続しか受け入れません。サーバーが動かなくなります。だから私はそれ以上進むことができません。

なぜこれが起こったのか、誰でも知っていますが、これをすべてのクエリをブロックする考えはありますか? または、なぜこのクエリがこれほど多くの接続を作成しないのですか?

4

2 に答える 2

1

SHOW TRANSACTION ISOLATION LEVEL接続プールが接続を開くときに呼び出される可能性があります

接続プールのサイズを減らしてみましたか? 1に設定してみてください。

今日、同様の問題が発生しました。これは、この投稿を見つけた方法ですmax connection reached。テスト環境でのみ発生することがわかりました。その理由は、テスト フレームワーク (ScalaTest) がすべてのテスト ケースに対して ORM でデータベース オブジェクトをインスタンス化するように見えるためです。

たとえば、私のpostgreには

  • max_connections = 100
  • connection pool = 100

データベースに接続するアプリが1つしかない場合は問題ないはずですが、テストでは、接続プールはテストケースと同じ数だけインスタンス化されるため、簡単に最大値に達します。

于 2016-05-01T13:38:43.907 に答える
0

あなたの説明では、これを解決するのに十分な情報がほとんどないため、以下は一般的なトラブルシューティングのアドバイスです.

  1. pg_stat_activity のその他の情報を確認することから始めます。application_name とは何ですか? 関連する IP アドレスは何ですか? 要するに、これらのクエリはどこから来ているのでしょうか?
  2. 接続が不足している場合、問題は、なぜこれほど多くの接続が得られているのか、そしてなぜ接続がほとんど行われていないのかということです。これには、サーバー自体ではなく、クライアント ソフトウェアのトラブルシューティングが含まれます。また、クエリがトランザクションでアクティブ、アイドル、またはアイドル状態であるかどうか、およびそれらが単にアイドル状態である場合、それが制限である場合、なぜ切断されていないのかを尋ねる価値があります。

これは言われていることですが、これらはクライアントソフトウェアが接続に使用しているdbフレームワークから来ていると思います。そして、私の推測では、役に立たないことをしている多くのクエリよりも、db 接続リークが発生している可能性が高いと思います。

于 2015-10-26T16:05:15.300 に答える