pg_stat_statements

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 付録 F. 追加で提供されるモジュール | 早送り | 次のページ

# F.27. pg_stat_statements

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

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

## F.27.1. `pg_stat_statements` ビュー

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

表 F-24. `pg_stat_statements` 列

名称 | 型 | 参照元 | 説明
--- | --- | --- | ---
`userid` | `oid` | ``pg_authid`.oid` | 文を実行したユーザのOID
`dbid` | `oid` | ``pg_database`.oid` | 文が実行されたデータベースのOID
`query` | `text` |  | 文のテキスト (track_activity_query_size バイトまで)
`calls` | `bigint` |  | 実行回数
`total_time` | `double precision` |  | 文処理に費やした総時間（秒単位）
`rows` | `bigint` |  | 文で検索されるか、または影響を受ける行の総数

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

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

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

## F.27.2. 関数

`pg_stat_statements_reset() returns void`

  `pg_stat_statements_reset`は`pg_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.track`に`none`が設定されていても、モジュールがロードされているときは常にこのメモリが消費されることに注意してください。

`postgresql.conf`に、これらのパラメータの値を設定するためには、custom_variable_classesに`pg_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 `<itagaki.takahiro@oss.ntt.co.jp>`

前のページ | ホーム | 次のページ
pg_standby | 上に戻る | pgstattuple