F.29. pgstattuple — 获取元组级统计信息 #
pgstattuple 模块提供了多种用于获取元组级统计信息的函数。
F.29.1. 函数
-
pgstattuple(text) returns record pgstattuple返回一个关系的物理长度、“死”元组所占百分比以及其他信息。这可以帮助用户判断是否需要执行清理。参数是目标关系的名称(可选带模式限定)或 OID。例如: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.23。
表 F.23.
pgstattuple输出列列 类型 描述 table_lenbigint关系的物理长度(字节) tuple_countbigint活元组数量 tuple_lenbigint活元组总长度(字节) tuple_percentfloat8活元组百分比 dead_tuple_countbigint死元组数量 dead_tuple_lenbigint死元组总长度(字节) dead_tuple_percentfloat8死元组百分比 free_spacebigint总空闲空间(字节) free_percentfloat8空闲空间百分比 注意
table_len总会大于tuple_len、dead_tuple_len和free_space之和。差值来自固定的页开销、每页的元组指针表,以及为保证元组正确对齐而产生的填充。pgstattuple只会在该关系上获取读锁。因此,结果并不代表一个瞬时快照;并发更新会影响结果。如果
HeapTupleSatisfiesDirty返回 false,pgstattuple就会将该元组判定为“死”。-
pgstattuple(oid) returns record 这与
pgstattuple(text)相同,只是目标关系通过 OID 指定。-
pgstatindex(text) returns record pgstatindex返回一条记录,显示有关 B-树索引的信息。例如:test=> SELECT * FROM pgstatindex('pg_cast_oid_index'); -[ RECORD 1 ]------+------ version | 2 tree_level | 0 index_size | 16384 root_block_no | 1 internal_pages | 0 leaf_pages | 1 empty_pages | 0 deleted_pages | 0 avg_leaf_density | 54.27 leaf_fragmentation | 0输出列如下:
列 类型 描述 versionintegerB-树版本号 tree_levelinteger根页所在的树层级 index_sizebigint索引总大小(字节) root_block_nobigint根页的位置(若无则为零) internal_pagesbigint“内部”(上层)页的数量 leaf_pagesbigint叶子页数量 empty_pagesbigint空页数量 deleted_pagesbigint已删除页数量 avg_leaf_densityfloat8叶子页平均密度 leaf_fragmentationfloat8叶子页碎片化程度 报告的
index_size通常会比internal_pages + leaf_pages + empty_pages + deleted_pages所对应的页数多 1 页,因为它还包含索引的元页。与
pgstattuple一样,结果是逐页累积得到的,因此不应期望它表示整个索引的瞬时快照。-
pgstatginindex(regclass) returns record pgstatginindex返回一条记录,显示有关 GIN 索引的信息。例如:test=> SELECT * FROM pgstatginindex('test_gin_index'); -[ RECORD 1 ]--+-- version | 1 pending_pages | 0 pending_tuples | 0输出列如下:
列 类型 描述 versionintegerGIN 版本号 pending_pagesinteger待处理列表中的页数 pending_tuplesbigint待处理列表中的元组数 -
pg_relpages(text) returns bigint pg_relpages返回该关系中的页数。
F.29.2. 作者
Tatsuo Ishii 和 Satoshi Nagayasu