pt-snap-statements

概要

2つの時刻のSQL文の統計情報の差分を計算して表示します。

オプションを指定することにより、特定の項目ごとにソートして表示することができます。

contribモジュールの pg_stat_statements が導入されている必要があります。

また、 track_io_timing オプションが有効にされている必要があります。

実行方法

pt-snap-statements [option...] [interval]

オプション

-h, --host=HOSTNAME
-p, --port=PORT
-U, --username=USERNAME
-d, --dbname=DBNAME
-s, --sort=KEY
-l
-t, --top=NUMBER
-R, --reset
--help

-h, --host オプションは、接続するPostgreSQLデータベースのサーバ名またはIPアドレスを指定します。オプションが指定されない場合は、PGHOST環境変数に設定された値が使われます。PGHOST環境変数が設定されていない場合には、デフォルトの値として localhost が使われます。

-p, --port オプションは、接続するPostgreSQLデータベースのポート番号を指定します。オプションが指定されない場合は、PGPORT環境変数に設定された値が使われます。PGPORT環境変数が設定されていない場合には、デフォルトの値として 5432 が使われます。

-U, --username オプションは、PostgreSQLデータベースに接続するユーザ名を指定します。オプションが指定されない場合は、PGUSER環境変数に設定された値が使われます。PGUSER環境変数が設定されていない場合には、USER環境変数に設定された値が使われます。

-d, --dbname オプションは、接続するデータベース名を指定します。オプションが指定されない場合は、PGDATABASE環境変数に設定された値が使われます。PGDATABASE環境変数が設定されていない場合には、データベースに接続するユーザ名と同じ名前のデータベースに接続します。

-s オプションは、ソートする項目を指定します(未実装)。KEY は、次のいずれかの値を取ることができます: CALLS, T_TIME, ROWS, B_HIT, B_READ, B_DIRT, B_WRTN, R_TIME, W_TIME

-l オプションは、ブロックの種別(共有バッファ、ローカルバッファ、一時バッファ)ごとに詳細な内訳を表示します(未実装)。-l オプションを指定しない場合は、共有バッファ、ローカルバッファ、一時バッファの数値を合算した値が表示されます。

-t, --top オプションは、表示するクエリの数を指定します。指定しない場合はすべてのクエリが表示されます。

-R, --reset オプションは、pg_stat_statements ビューの統計情報を初期化します。

出力項目

USER クエリを実行したユーザ名
DBNAME クエリを実行したデータベース名
QUERYID 実行されたクエリのクエリID(16進数表記)
QUERY 実行されたクエリ(最大30文字で切り詰め)
CALLS クエリの実行回数
T_TIME クエリの総実行時間(ミリ秒)
ROWS クエリによって取得または影響を受けた行の総数
B_HIT ブロック読み込みの際にバッファから読み込んだブロック総数
B_READ ブロック読み込みの際にディスクから読み込んだブロック総数
B_DIRT クエリによってページが更新されたページ総数
B_WRTN クエリによってディスクに書き込まれたブロック総数
R_TIME ディスクからのブロック読み込みにかかった総時間(ミリ秒) (track_io_timing パラメータが有効になっている必要がある)
W_TIME ディスクへのブロック書き込みにかかった総時間(ミリ秒) (track_io_timing パラメータが有効になっている必要がある)

実行例

postgres データベースに接続し、で5秒間に実行されたSQL文を総実行時間(T_TIME)の長い順にソートしてすべて表示します。

$ pt-snap-statements -d postgres 5
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
|  USER |  DBNAME  | QUERYID  |             QUERY              | CALLS | T_TIME | ROWS | B_HIT | B_READ | B_DIRT | B_WRTN | R_TIME | W_TIME |
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
| snaga | postgres | 80053daf | UPDATE pgbench_branches SET bb |   677 |  12007 |  677 |  9160 |      1 |      1 |      0 | 0.0    | 0.0    |
| snaga | postgres | 1675159e | UPDATE pgbench_tellers SET tba |   681 |   7648 |  681 |  3403 |      0 |      0 |      0 | 0.0    | 0.0    |
| snaga | postgres | ec088219 | UPDATE pgbench_accounts SET ab |   684 |    530 |  684 |  2289 |    585 |    568 |      0 | 125.9  | 0.0    |
| snaga | postgres | 198383d  | SELECT abalance FROM pgbench_a |   682 |     73 |  682 |  2080 |      0 |      0 |      0 | 0.0    | 0.0    |
| snaga | postgres | da8cc6f  | INSERT INTO pgbench_history (t |   676 |     34 |  676 |   704 |     12 |     10 |      0 | 0.0    | 0.0    |
| snaga | postgres | d4e6bf94 | BEGIN;                         |   684 |      4 |    0 |     0 |      0 |      0 |      0 | 0.0    | 0.0    |
| snaga | postgres | a81672e  | END;                           |   671 |      3 |    0 |     0 |      0 |      0 |      0 | 0.0    | 0.0    |
| snaga | postgres | 8caa574  | select count(*) from pgbench_b |     1 |      0 |    1 |     4 |      0 |      0 |      0 | 0.0    | 0.0    |
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
$

ホスト 192.168.1.101 のポート 5433 で稼働しているPostgreSQLサーバの データベース postgres にユーザ snaga で接続し、5秒間に実行されたSQL文を総実行時間(T_TIME)の長い順にソートしてトップ5件を表示します。

$ pt-snap-statements --host 192.168.1.101 -p 5433 -U snaga -d postgres -t 5 5
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
|  USER |  DBNAME  | QUERYID  |             QUERY              | CALLS | T_TIME | ROWS | B_HIT | B_READ | B_DIRT | B_WRTN | R_TIME | W_TIME |
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
| snaga | postgres | 80053daf | UPDATE pgbench_branches SET bb |   503 |   9953 |  503 |  8430 |     14 |      7 |      0 | 0.6    | 0.0    |
| snaga | postgres | 1675159e | UPDATE pgbench_tellers SET tba |   508 |   6483 |  508 |  2551 |     10 |      9 |      0 | 0.3    | 0.0    |
| snaga | postgres | ec088219 | UPDATE pgbench_accounts SET ab |   511 |    560 |  511 |  1424 |    698 |    477 |      7 | 91.0   | 12.1   |
| snaga | postgres | 198383d  | SELECT abalance FROM pgbench_a |   511 |     93 |  511 |  1550 |      0 |      0 |      0 | 0.0    | 0.0    |
| snaga | postgres | da8cc6f  | INSERT INTO pgbench_history (t |   503 |     20 |  503 |   530 |     13 |     11 |      0 | 0.1    | 0.0    |
+-------+----------+----------+--------------------------------+-------+--------+------+-------+--------+--------+--------+--------+--------+
$