【PostgreSQL】実行中のSQLを確認したい(pg_stat_activity)

既に稼働中のシステムでやたら負荷が高い、Postgreのプロセスがなかなか終わらない、 そんなときは実行中のSQLを確認できれば、問題の箇所が特定できるかもしれない。

「pg_stat_activity」というビューを参照すれば実行中のSQLや実行時間を確認することができます。

スポンサーリンク

pg_stat_activityによる確認

xxx=> SELECT datname,usename,query_start,query FROM pg_stat_activity;
-[ RECORD 1 ]----------------------------------------------------------------
datname     | DB名
usename     | SQL実行ユーザー名
query_start | 2020-02-02 23:23:07.227558+09
query       | SELECT datname,usename,query_start,query FROM pg_stat_activity;

とりあえず適当な列だけ出力してみました。
"query"列に肝心の実行中のSQLが入ってきます。今回は「pg_stat_activity」に対して実行したSQLがそのまま載ってますが、 もし他のSQLが実行中であれば、その分だけ行が返されます。

この確認にはpostgresql.confの設定が必要で、"track_activitiesをOn"にする必要がありますが、デフォルトで有効(On)になっているので、あまり気にする必要はないかもしれません。
※年季の入った古いサーバーを保守するとき、PostgreSQLのバージョンが古すぎて確認できず悲しくなること多数、サーバーの保守が切れたらリプレイスしよう!(切実)

ちなみに他のDBユーザーが実行しているSQLは下記のようにが確認できない。

xxx=> SELECT datname,usename,query_start,query FROM pg_stat_activity;
-[ RECORD 1 ]----------------------------------------------------------------
datname     | DB名
usename     | SQL実行ユーザー名
query_start | 
query       | <insufficient privilege>

※postgresユーザーや、SUPERUSER権限を持つユーザーであれば可

pg_stat_activityとは?

”統計情報コレクタ”と呼ばれるものの一種で、PostgreSQLのいろいろな情報を集めてます。
”pg_stat_activity”の内容を一言で表すと、「実行中のSQLの状態を把握する」ためのビュー情報です。

OSS-DB Gold的には試験範囲に含まれるため、覚えておくことを推奨。
実務でも知ってると、パフォーマンスチューニングの手がかりを得られるし役に立つナイスなビュー。

※この記事はOSS-DB Silver対策問題集(http://oss-db-taisaku.net/pt/check_sql.php)より記事を移設したものです。

スポンサーリンク
おすすめの記事