他のバージョンの文書11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

F.27. pg_stat_statements

pg_stat_statementsモジュールはサーバで実行されたすべてのSQL文の実行時の統計情報を記録する手段を提供します。

追加の共有メモリを必要とするため、postgresql.confpg_stat_statementsshared_preload_librariesに追加することによって、モジュールをロードしなければなりません。 そのモジュールを追加もしくは削除するにはサーバを再起動させる必要があるということを意味しています。

F.27.1. pg_stat_statements ビュー

モジュールにより集められた統計情報はpg_stat_statementsというシステムビューにより利用することができます。 このビューはそれぞれ個別の問い合わせテキスト、データベースID、およびユーザID(モジュールが追跡できる個別の文の最大数まで)に対して1つの行を含んでいます。 ビューの列は表F-24に示す通りです。

表 F-24. pg_stat_statements

名称参照元説明
useridoidpg_authid.oid文を実行したユーザのOID
dbidoidpg_database.oid文が実行されたデータベースのOID
querytext 文のテキスト (track_activity_query_size バイトまで)
callsbigint 実行回数
total_timedouble precision 文処理に費やした総時間(秒単位)
rowsbigint 文で検索されるか、または影響を受ける行の総数

このビューと関数pg_stat_statements_resetは、pg_stat_statements.sqlを実行することによって明示的にインストールされたデータベースのみで利用可能です。 しかしながら、統計情報はpg_stat_statementsモジュールがサーバにロードされていれば、ビューの存在に関わらず、サーバのすべてのデータベースについて記録されます。

セキュリティ上の理由から、スーパーユーザ以外のユーザは、他のユーザによって実行された問い合わせのテキストを見ることができません。 ただし、ビューがそれらユーザのデータベースにインストールされている場合、統計情報についてはそれらユーザから見ることができます。

文で範囲外のパラメタ値が使用されていても、それらに同じテキストがあれば、文は同じものとして扱われていることに注意してください。 範囲外のパラメタを使うことは文を分類することに役立ち、また、統計情報をより役立つようにするでしょう。

F.27.2. 関数

pg_stat_statements_reset() returns void

pg_stat_statements_resetpg_stat_statementsによってこれまでに集めたすべての統計情報を捨てます。 デフォルトでは、この関数はスーパーユーザのみ実行することができます。

F.27.3. 設定パラメータ

pg_stat_statements.max (integer)

pg_stat_statements.maxは、モジュールにより記録される文の最大数(すなわち、pg_stat_statementsビューにおける行の最大数)です。これを超える異なった文を検出した場合は、最も実行回数の低い文の情報が捨てられます。 デフォルトは1000です。 このパラメータはサーバ開始時にのみ指定できます。

pg_stat_statements.track (enum)

pg_stat_statements.trackは、モジュールによりカウントされる文を制御します。 topを指定した場合は(直接クライアントによって発行された)最上階層の文を記録します。 allは(関数の中から呼び出された文などの)入れ子になった文も記録します。 noneは無効にします。 デフォルトはtopです。 スーパーユーザだけがこの設定を変更することができます。

pg_stat_statements.save (boolean)

pg_stat_statements.saveは、サーバを終了させる際に文の統計情報を保存するかどうかを指定します。 offの場合、統計情報は終了時に保存されず、サーバ開始時に再読み込みもされません。 デフォルト値はonです。 このパラメータはpostgresql.confファイル、またはサーバコマンドラインでのみ設定できます。

このモジュールはおよそpg_stat_statements.max * track_activity_query_sizeバイト量の追加の共有メモリを必要とします。 pg_stat_statements.tracknoneが設定されていても、モジュールがロードされているときは常にこのメモリが消費されることに注意してください。

postgresql.confに、これらのパラメータの値を設定するためには、custom_variable_classespg_stat_statementsを追加する必要があります。 標準的な使用例は次の通りです。

# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'

custom_variable_classes = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
  

F.27.4. サンプル出力

$ pgbench -i bench

postgres=# SELECT pg_stat_statements_reset();

$ pgbench -c10 -t300 -M prepared bench

postgres=# \x
postgres=# SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 3;
-[ RECORD 1 ]------------------------------------------------------------
userid     | 10
dbid       | 63781
query      | UPDATE branches SET bbalance = bbalance + $1 WHERE bid = $2;
calls      | 3000
total_time | 20.716706
rows       | 3000
-[ RECORD 2 ]------------------------------------------------------------
userid     | 10
dbid       | 63781
query      | UPDATE tellers SET tbalance = tbalance + $1 WHERE tid = $2;
calls      | 3000
total_time | 17.1107649999999
rows       | 3000
-[ RECORD 3 ]------------------------------------------------------------
userid     | 10
dbid       | 63781
query      | UPDATE accounts SET abalance = abalance + $1 WHERE aid = $2;
calls      | 3000
total_time | 0.645601
rows       | 3000
  

F.27.5. 作者

Takahiro Itagaki