Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

PostgreSQLで実行中のSQLを確認する方法について。

概要

タイトルの通り、PostgreSQLで実行中のSQLを確認する方法についてです。 SELECT文を使って、実行中のSQLと状態を確認してみます。

対象はPostgreSQL9.6です。

早速、確認してみる

下記のSELECT文を実行すると、現在実行中のSQLを取得できます。

※PostgreSQL9.6以前では、SELECT句から「待機イベント型」と「待機イベント名」を除去して実行してください。

SELECT
    pg_stat_activity.pid AS "プロセスID"
  , pg_stat_activity.query AS "実行中のクエリ"
  , pg_stat_activity.query_start AS "クエリの開始時間"
  , CASE WHEN pg_stat_activity.state = 'active' THEN current_timestamp - pg_stat_activity.query_start END AS "クエリの経過時間"
  , pg_stat_activity.datname AS "実行データベース"
  , pg_stat_activity.usename AS "実行ユーザー"
  , pg_stat_activity.client_addr AS "クライアントのIPアドレス"
  , pg_stat_activity.client_hostname AS "クライアントのホスト名"
  , pg_stat_activity.application_name AS "クライアントのアプリ"
  , pg_stat_activity.wait_event_type AS "待機イベント型"
  , pg_stat_activity.wait_event AS "待機イベント名"
FROM
  pg_stat_activity
WHERE
      pg_stat_activity.state = 'active'
  AND pg_stat_activity.pid != pg_backend_pid()
ORDER BY
    pg_stat_activity.query_start
  , pg_stat_activity.pid

各カラムの説明はだいたいカラム名の通りです。 ちなみに、「待機イベント型」と「待機イベント名」がNULL以外の場合、ロックの解放待ちなどの何らかの待ち状態が発生しています。

詳細については下記の公式マニュアルを参照してください。

https://www.postgresql.jp/document/9.6/html/monitoring-stats.html#wait-event-table

まとめ

以上、簡単ですがPostgreSQLで実行中のSQLを確認する方法でした。