PostgreSQLを使用していると、現在実行中のクエリの状況を確認したくなる場面があります。特に負荷テストやパフォーマンスの問題が疑われる際やデータベースの応答が安定しない時には、どのクエリが実行中なのかをリアルタイムで把握して原因を追いかけることができます。
以下のコマンドを使用して、定期的にクエリの状況を確認できます。これを実行し、時々チェックすることで異常な挙動を発見できます。
watch -n 60 "psql -d {データベース名} -c \"SELECT pid, usename, datname, state, SUBSTR(query,0,120), query_start FROM pg_stat_activity WHERE state != 'idle' ORDER BY query_start DESC;\""
コマンドの解説
watch
: 指定したコマンドを一定間隔で繰り返し実行するLinuxのユーティリティです。ここでは、-n 60
を指定して1分おきにコマンドを実行します。psql
: PostgreSQLに接続するためのコマンドラインツールです。ここでは、データベースmetadb_toyo-shin
に接続しています。pg_stat_activity
: PostgreSQLが提供するシステムビューで、現在のセッションに関する情報を取得できます。
取得しているカラム:
pid
: プロセスIDusename
: ユーザー名datname
: データベース名state
: セッションの状態(例:active
,idle
)query
: 実行中のクエリ(120文字にトリム。トリムで画面が大きくなりすぎるのを防ぐ)query_start
: クエリの開始時間
実行例
コマンドを実行すると、以下のような出力が得られます。
pid | usename | datname | state | query | query_start
--------+-------------+-------------------+---------+--------------------------------------+------------------------
12345 | db_user | my_database | active | SELECT * FROM my_table WHERE ... | 2025-01-14 10:30:00+00
12346 | app_user | another_database | active | INSERT INTO logs (msg) VALUES ... | 2025-01-14 10:29:45+00
こんな感じでリアルタイムに状況を見ることができます。