既に稼働中のシステムでやたら負荷が高い、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)より記事を移設したものです。