PostgreSQLスキルアップノート(自己啓発のための個人サイト)
統計情報コレクタの標準統計情報ビュー・全体の情報編
【一覧に戻る】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 統計情報コレクタの標準統計情報ビュー・全体の情報編
■■■■
■■■■
■■■■ 2012/11/17
■■■■ 使用環境:PostgreSQL9.1.4 (CentOS6.2)
(C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★自己都合により実機確認は9.1、マニュアルへのリンクは9.2としています。ご了承下さい。
【マニュアル】
・統計情報コレクタ→●[マニュアル]データベース活動状況の監視−統計情報コレクタ
・実行時統計情報→●[マニュアル]サーバの設定−実行時統計情報
【参考記事】
なし
・統計情報コレクタによって反映された情報
■1■ pg_stat_activity ★特に重要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・サーバプロセスにつき1行。
・接続したDBにかかわらず全DBの情報が表示される。
・目的のDBだけを表示させたい場合はwhere句にdatnameを加える。
【□】 select * from pg_stat_activity [where datname='dbname'] ;
test1=# select * from pg_stat_activity;
datid | datname | procpid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | waiting | current_query
--------+----------+---------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+---------------------------------
12780 | postgres | 5118 | 10 | postgres | psql | | | -1 | 2012-11-16 22:54:01.070593+09 | | 2012-11-16 22:54:03.306073+09 | f |
270701 | test1 | 3837 | 10 | postgres | psql | | | -1 | 2012-11-16 21:14:50.102571+09 | | 2012-11-16 21:15:40.681623+09 | f |
270701 | test1 | 3906 | 10 | postgres | psql | | | -1 | 2012-11-16 21:16:13.391585+09 | | 2012-11-16 21:16:35.999563+09 | f |
270701 | test1 | 5133 | 272004 | test1 | psql | | | -1 | 2012-11-16 22:55:18.150346+09 | 2012-11-16 23:00:46.919049+09 | 2012-11-16 23:00:46.919049+09 | f | select * from pg_stat_activity;
(4 rows)
select * from pg_stat_activity where datname='test1';
test1=# select * from pg_stat_activity where datname='test1';
datid | datname | procpid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | waiting | current_query
--------+---------+---------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+-------------------------------------------------------
270701 | test1 | 3837 | 10 | postgres | psql | | | -1 | 2012-11-16 21:14:50.102571+09 | | 2012-11-16 21:15:40.681623+09 | f |
270701 | test1 | 3906 | 10 | postgres | psql | | | -1 | 2012-11-16 21:16:13.391585+09 | | 2012-11-16 21:16:35.999563+09 | f |
270701 | test1 | 5133 | 272004 | test1 | psql | | | -1 | 2012-11-16 22:55:18.150346+09 | 2012-11-16 23:00:33.160584+09 | 2012-11-16 23:00:33.160584+09 | f | select * from pg_stat_activity where datname='test1';
(3 rows)
【メモ】
ビューの定義(select文)を確認すると、pg_classをベースに大半の情報が「統計情報アクセス関数」pg_stat_get_〜を使って表示させていた。
「統計情報アクセス関数」の大半はpg_statビューで見やすく整理されているようなので大半の関数は単体であえて使う必要はなさそう。
なお、9.1のマニュアルで大量に記載のあった「統計情報アクセス関数」
は大幅に関数の数が減って「補助統計情報関数」「バックエンド単位の統計情報関数」という名前に変わっている。
やはり、pg_stat_〜をアクセスすれば事足りる情報を外して本当に有用なものだけに絞ったのだと思う。
事実、9.2の改訂がなければ「pg_backend_pid()」(現在のセッションのサーバプロセスID)は見つけることができなかった。
postgres=# \d+ pg_stat_all_tables
View "pg_catalog.pg_stat_all_tables"
Column | Type | Modifiers | Storage | Description
-------------------+--------------------------+-----------+---------+-------------
relid | oid | | plain |
schemaname | name | | plain |
relname | name | | plain |
seq_scan | bigint | | plain |
seq_tup_read | bigint | | plain |
idx_scan | bigint | | plain |
idx_tup_fetch | bigint | | plain |
n_tup_ins | bigint | | plain |
n_tup_upd | bigint | | plain |
n_tup_del | bigint | | plain |
n_tup_hot_upd | bigint | | plain |
n_live_tup | bigint | | plain |
n_dead_tup | bigint | | plain |
last_vacuum | timestamp with time zone | | plain |
last_autovacuum | timestamp with time zone | | plain |
last_analyze | timestamp with time zone | | plain |
last_autoanalyze | timestamp with time zone | | plain |
vacuum_count | bigint | | plain |
autovacuum_count | bigint | | plain |
analyze_count | bigint | | plain |
autoanalyze_count | bigint | | plain |
View definition:
SELECT c.oid AS relid,
n.nspname AS schemaname,
c.relname,
pg_stat_get_numscans(c.oid) AS seq_scan,
pg_stat_get_tuples_returned(c.oid) AS seq_tup_read,
sum(pg_stat_get_numscans(i.indexrelid))::bigint AS idx_scan,
sum(pg_stat_get_tuples_fetched(i.indexrelid))::bigint + pg_stat_get_tuples_fetched(c.oid) AS idx_tup_fetch,
pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins,
pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,
pg_stat_get_tuples_deleted(c.oid) AS n_tup_del,
pg_stat_get_tuples_hot_updated(c.oid) AS n_tup_hot_upd,
pg_stat_get_live_tuples(c.oid) AS n_live_tup,
pg_stat_get_dead_tuples(c.oid) AS n_dead_tup,
pg_stat_get_last_vacuum_time(c.oid) AS last_vacuum,
pg_stat_get_last_autovacuum_time(c.oid) AS last_autovacuum,
pg_stat_get_last_analyze_time(c.oid) AS last_analyze,
pg_stat_get_last_autoanalyze_time(c.oid) AS last_autoanalyze,
pg_stat_get_vacuum_count(c.oid) AS vacuum_count,
pg_stat_get_autovacuum_count(c.oid) AS autovacuum_count,
pg_stat_get_analyze_count(c.oid) AS analyze_count,
pg_stat_get_autoanalyze_count(c.oid) AS autoanalyze_count
FROM pg_class c
LEFT JOIN pg_index i ON c.oid = i.indrelid
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = ANY (ARRAY['r'::"char", 't'::"char"])
GROUP BY c.oid, n.nspname, c.relname;
■2■ pg_stat_bgwriter
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・データベースクラスタあたり1行。
・どのDBへ接続しても同じ情報
\c postgres test1
select * from pg_stat_bgwriter;
\c template1 test1
select * from pg_stat_bgwriter;
\c test1 test1
select * from pg_stat_bgwriter;
以上、いずれも同じ、
以下となる。
template1=# \c test1 test1
You are now connected to database "test1" as user "test1".
test1=# select * from pg_stat_bgwriter;
checkpoints_timed | checkpoints_req | buffers_checkpoint | buffers_clean | maxwritten_clean | buffers_backend | buffers_backend_fsync | buffers_alloc | stats_reset
-------------------+-----------------+--------------------+---------------+------------------+-----------------+-----------------------+---------------+-------------------------------
110 | 35 | 190583 | 7403 | 50 | 178708 | 0 | 121487 | 2012-11-14 00:06:39.109129+09
(1 row)
■3■ pg_stat_database
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
・データベースあたり。
・どのDBへ接続しても、全DBの数分だけ表示される。
\c postgres test1
select * from pg_stat_database;
\c template1 test1
select * from pg_stat_database;
\c test1 test1
select * from pg_stat_database;
以上、どれもみな同じ以下の結果が表示される。(DBクラスタ内のDB分)
datid | datname | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted | conflicts | stats_reset
--------+------------+-------------+-------------+---------------+-----------+----------+--------------+-------------+--------------+-------------+-------------+-----------+-------------------------------
1 | template1 | 0 | 19 | 0 | 67 | 1099 | 5075 | 505 | 0 | 0 | 0 | 0 | 2012-11-16 22:41:18.590405+09
12772 | template0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
12780 | postgres | 0 | 1355 | 0 | 486 | 53374 | 547524 | 14735 | 0 | 0 | 0 | 0 | 2012-11-14 00:14:10.853372+09
270701 | test1 | 3 | 1818 | 43 | 1142121 | 22960831 | 213252661 | 30974 | 22097000 | 755 | 18 | 0 | 2012-11-14 03:03:00.92906+09
287697 | database01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
287812 | database02 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
(6 rows)
以上