PostgreSQLサーバーに送信されたクエリを確認する必要があります。通常、SQLServerプロファイラーを使用してSQLServerランドでこのアクションを実行しますが、PostgreSQLでこれを実行する方法をまだ見つけていません。かなりの数の有料ツールがあるようですが、オープンソースのバリアントがあることを望んでいます。
回答:
log_statement構成設定を使用して、サーバーへのすべてのクエリのリストを取得できます
https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement
それとログファイルのパスを設定するだけで、リストが作成されます。長時間実行されるクエリのみをログに記録するように構成することもできます。
次に、それらのクエリを取得し、それらに対してEXPLAINを実行して、それらで何が起こっているかを調べることができます。
https://www.postgresql.org/docs/9.2/static/using-explain.html
Joshuaの回答に加えて、現在実行されているクエリを確認するには、いつでも次のステートメントを発行するだけです(PGAdminIIIのクエリウィンドウなど)。
SELECT datname,procpid,current_query FROM pg_stat_activity;
サンプル出力:
datname | procpid | current_query
---------------+---------+---------------
mydatabaseabc | 2587 | <IDLE>
anotherdb | 15726 | SELECT * FROM users WHERE id=123 ;
mydatabaseabc | 15851 | <IDLE>
(3 rows)
pgBadger(http://dalibo.github.io/pgbadger/)を発見しました。これは、私の命を何度も救った素晴らしいツールです。レポートの例を次に示します:http://dalibo.github.io/pgbadger/samplev4.html。それを開いて「トップ」メニューに移動すると、最も遅いクエリと時間のかかるクエリが表示されます。次に、詳細を尋ねて、クエリを時間ごとに表示する素敵なグラフを表示できます。詳細ボタンを使用すると、SQLテキストをきれいな形式で表示できます。したがって、このツールは無料で完璧であることがわかります。
pg_stat_statementsを使用できます拡張機能。
dockerでdbを実行している場合はdocker-compose.yml
、このコマンドをに追加するだけです。それ以外の場合は、セットアップのインストール手順を確認してください。
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
次に、データベースで次のクエリを実行します。
CREATE EXTENSION pg_stat_statements;
次に、実行に時間がかかった操作を確認します。
SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;
または、そのビューで他のクエリを試して、探しているものを見つけてください。