PostgreSQL : アクセス統計情報 「サーバプロセス」

はじめに

PostgreSQLを勉強するにあたって、構築や運用で必要そうな事を備忘録として残しました。
本記事は、各クエリごとに作成されるサーバプロセスのアクセス統計情報について確認します。

前提

PostgreSQL 13 を使用しています。

pg_stat_activityについて

pg_stat_activityビューは、サーバプロセス単位に「クエリの状態」や「プロセスの現在の活動」に関連した情報を表示します。問題の発生していクエリやプロセスを特定することが出来ます。

利用目的

  • 問題のあるクエリの確認
  • 長時間経過しているSQLの調査
  • ロック待ち状態のSQLの調査

使い方

コマンド

SELECT * FROM pg_stat_activity;

図. pg_stat_activityビューの実行

主な表示項目

表. pg_stat_activityビューの主な項目

ビュー説明
datidデータベースのOID
datnameデータベース名
pidプロセスID
leader_pidパラレルグループリーダのプロセスID
※このプロセスがパラレルグループリーダーであるか、パラレルクエリに参加していないのであればNULL
backend_startプロセスの起動時間
xact_startトランザクション開始時刻
query_startクエリの発行時刻
wait_event_type処理待ちの状態
wait_event処理待ちの具体的な名称
stateプロセスの状態

 1. active : 問い合わせ実行中
 2. idle : トランザクション外でコマンド待ち
 3. idle in transaction : トランザクション内でコマンド待ち
 4. idle in transaction (aborted) : トランザクション内でエラー発生後、コマンド待ち
 5. fastpath function call : 関数呼び出し中
 6. disabled : track_activitiesがoff
backend_xidトランザクションID
※バックエンドの最上位のトランザクション識別子
backend_xmin現在のバックエンドのxmin
query_idクエリのID
query最後に実行(実行中)のクエリ

トランザクションの経過時間算出

xact_startはトランザクションの開始時刻となります。
このカラムと現在の時刻との差を算出し、どのくらいの時間が経過しているかを確認します。

コマンド

SELECT pid, state, (current_timestamp - xact_start)::interval(3) AS duration, query
FROM pg_stat_activity
WHERE pid <> pg_backend_pid();

図. トランザクションの経過時間算出

クエリの取り消し

pidによりプロセス番号を確認後、クエリの取り消しは、pg_cancel_backend関数を利用します。

コマンド

SELECT pg_cancel_backend('PID');

図. クエリの取り消し

セッションの切断

接続を強制的に切断する場合には、pg_terminate_backend関数を利用します。

コマンド

SELECT pg_terminate_backend('PID');

図. セッションの切断

参考文献

1. 勝俣 智成, 佐伯 昌樹, 原田 登志 (2018)「[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則」技術評論社
2. 河原 翔 (2014)「LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト」エヌ・ティ・ティ・ソフトウェア株式会社
3. OSS-DB道場

コメントする