F.33. pgstattuple

pgstattupleモジュールはタプルレベルの統計情報を入手するための各種関数を提供します。

F.33.1. 関数

pgstattuple(text) returns record

pgstattupleはリレーションの物理的な長さ、"不要"なタプルの割合、およびその他の情報を返します。 これはバキュームが必要かどうかユーザが判断する時に有用かもしれません。 引数は対象とするリレーションの名前(スキーマ修飾可)です。 以下に例を示します。

test=> SELECT * FROM pgstattuple('pg_catalog.pg_proc');
-[ RECORD 1 ]------+-------
table_len          | 458752
tuple_count        | 1470
tuple_len          | 438896
tuple_percent      | 95.67
dead_tuple_count   | 11
dead_tuple_len     | 3157
dead_tuple_percent | 0.69
free_space         | 8932
free_percent       | 1.95

出力列を表F-21で説明します。

表 F-21. pgstattupleの出力列

説明
table_lenbigintリレーションのバイト単位の物理長
tuple_countbigint有効なタプル数
tuple_lenbigint有効なタプルの物理長(バイト単位)
tuple_percentfloat8有効タプルの割合
dead_tuple_countbigint無効なタプル数
dead_tuple_lenbigintバイト単位の総不要タプル長
dead_tuple_percentfloat8不要タプルの割合
free_spacebigintバイト単位の総空き領域
free_percentfloat8空き領域の割合

pgstattuple はリレーション上で読み取りロックのみを獲得します。 ですので、結果はこの瞬間のスナップショットを考慮しません。つまり、同時実行の更新がその結果に影響を与えます。

pgstattuple は、HeapTupleSatisfiesNowが偽を返すかどうかで、タプルが"不要"かどうか判定します。

pgstattuple(oid) returns record

OIDで対象リレーションを指定する点を除き、これはpgstattuple(text)と同じです。

pgstatindex(text) returns record

pgstatindexはB-treeインデックスに関する情報を示すレコードを返します。 以下は例です。

test=> SELECT * FROM pgstatindex('pg_cast_oid_index');
-[ RECORD 1 ]------+------
version            | 2
tree_level         | 0
index_size         | 8192
root_block_no      | 1
internal_pages     | 0
leaf_pages         | 1
empty_pages        | 0
deleted_pages      | 0
avg_leaf_density   | 50.27
leaf_fragmentation | 0

出力列は以下の通りです。

説明
versionintegerB-treeバージョン番号
tree_levelintegerルートページのツリーレベル
index_sizebigintインデックス内の総ページ数
root_block_nobigintルートブロックの場所
internal_pagesbigint"内部"(上位レベル)ページ数
leaf_pagesbigintリーフページ数
empty_pagesbigint空ページ数
deleted_pagesbigint削除ページ数
avg_leaf_densityfloat8リーフページの平均密度
leaf_fragmentationfloat8リーフページの断片化

pgstattupleでは、結果はページ毎に累積されます。 この瞬間のインデックス全体のスナップショットが存在すると想定してはいけません。

pg_relpages(text) returns bigint

pg_relpagesはリレーション内のページ数を返します。

F.33.2. 作者

Tatsuo Ishii and Satoshi Nagayasu