Postgres:データベースサーバーによって実行されているすべてのSQLステートメントを確認するにはどうすればよいですか?


23

パフォーマンス上の理由から、アプリケーションがデータベースに対して行うすべてのSQLステートメントを確認しています。PostgreSQLデータベースサーバーによって実行されるすべてのステートメントを記録する簡単な方法はありますか?ありがとう。


この以下の説明では、現在実行中のクエリを参照する方法について説明されてtutorialdba.com/2016/11/pgs​​tatactivity-view-explanation-in.html
nijam

回答:


27

探している設定オプションはlog_statement = "all"(ステートメントだけが必要な場合)、またはlog_min_statement_duration = <some number>「遅い」クエリの直後(「遅い」の値の場合)です。ロギング設定の詳細については、http://www.postgresql.org/docs/current/static/runtime-config-logging.htmlを参照してください


1
すべてのステートメントをログに記録すると、パフォーマンスが低下します(公式ドキュメントに記載されています)。しかし、8.4は得ることの優れた機能があるexplain analyze、それが実行されたタイでのスロークエリのを、あなたはまだ発売されていない8.4としてこれをテストを開始することがありますが、それはその起こっ知るための良いオプションだ実行時に、explain Explain出力が問題ない場合、おそらくI / OまたはCPUの境界に問題が発生していますが、少なくともクエリ自体ではないことがわかります
-serverhorror

5
log_statement = 'mod'オプションが本当に好きです。作成、更新、削除のみを表示し、すべての選択ステートメントをスキップします。どのコードがいくつかのフィールドを調整しているのかを把握しようとしている場合に最適です。
ドンカークビー

5

このauto_explainモジュールはこれに非常に役立ちます。ステートメントを記録するだけでなく、実行計画も記録し、PL / PgSQL関数内で実行されるステートメントを記録することもできます。分析を有効にしない限り、パフォーマンスヒットはかなり低くなります。その場合、すべてのクエリでかなりのタイミングオーバーヘッドが発生します。

auto_explainドキュメントを参照してください。


「auto_explain」はモジュールであるため、AWS RDS Postgresデータベースでは実行されないことに注意してください:(
johntellsall

1
@johntellsall RDSはauto_explain、サポートされているモジュールのリストにあります。docs.aws.amazon.com/AmazonRDS/latest/UserGuide/に
Craig Ringer

3

もちろん、最も遅いクエリは自分で検出できますが、PostgreSQLログアナライザーであるpgFouineを使用することをお勧めします。インストールが簡単で、本当に便利です。

サンプルレポート:ここここ


プロジェクトでpgFouineを使用し、インデックスが物事を大いに助けるいくつかの場所を特定しました。
ポールトムブリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.