【PostgreSQL】定期的に実行中のクエリをコンソールに出す方法

  • 2025年1月14日
  • 2025年1月14日
  • SQL

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: プロセスID
  • usename: ユーザー名
  • 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
    

こんな感じでリアルタイムに状況を見ることができます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG