| PostgreSQL 9.5.3 文档 | |||
|---|---|---|---|
| 上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页 |
pgstattuple模块提供多种函数来获得元组级别的统计信息。
pgstattuple(regclass) 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-21中描述。
表 F-21. pgstattuple 输出字段
| 字段 | 类型 | 描述 |
|---|---|---|
| table_len | bigint | 物理关系长度,以字节计 |
| tuple_count | bigint | 活的元组的数量 |
| tuple_len | bigint | 活的元组的总长度,以字节计 |
| tuple_percent | float8 | 活的元组的百分比 |
| dead_tuple_count | bigint | 死的元组的数量 |
| dead_tuple_len | bigint | 死的元组的总长度,以字节计 |
| dead_tuple_percent | float8 | 死的元组的百分比 |
| free_space | bigint | 空闲空间总量,以字节计 |
| free_percent | float8 | 空闲空间的百分比 |
pgstattuple只要求在关系上的一个读锁。
因此结果不能反映一个即时快照,并发更新将影响结果。
如果HeapTupleSatisfiesDirty返回假,
pgstattuple就判定一个元组是"死的"。
pgstattuple(text) returns record 与pgstattuple(regclass)相同,
只不过目标关系被指定为TEXT。这个函数只是为了向后兼容而保留,
在某些未来的发布中将会被废除。
pgstatindex(regclass) 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
输出字段是:
| 字段 | 类型 | 描述 |
|---|---|---|
| version | integer | B-树 版本号 |
| tree_level | integer | 根页的树级别 |
| index_size | bigint | 总索引大小(以字节为单位) |
| root_block_no | bigint | 根页面的位置(如果没有则为零) |
| internal_pages | bigint | "内部"(上一级)页面的数量 |
| leaf_pages | bigint | 叶子页面的数量 |
| empty_pages | bigint | 空页面的数量 |
| deleted_pages | bigint | 删除页面的数量 |
| avg_leaf_density | float8 | 叶子页面的平均密度 |
| leaf_fragmentation | float8 | 叶子页面碎片 |
报告的index_size通常比由internal_pages + leaf_pages + empty_pages + deleted_pages计数的多一个页面, 因为它还包括索引的元页。
与pgstattuple一样,结果是一页一页累积的,
并且不要期望结果会表示整个索引的一个即时快照。
pgstatindex(text) returns record 与pgstatindex(regclass)相同,
只不过目标索引被指定为TEXT。这个函数只是为了向后兼容而保留,
在某些未来的发布中将会被废除。
pgstatginindex(regclass) returns record
pgstatginindex返回一个记录显示有关一个 GIN 索引的信息。例如:
test=> SELECT * FROM pgstatginindex('test_gin_index');
-[ RECORD 1 ]--+--
version | 1
pending_pages | 0
pending_tuples | 0
输出字段是:
pg_relpages(regclass) returns bigint pg_relpages返回关系中的页面数。
pg_relpages(text) returns bigint 与pg_relpages(regclass)相同,
只不过目标关系被指定为TEXT。这个函数只是为了向后兼容而保留,
在某些未来的发布中将会被废除。
pgstattuple_approx(regclass) returns record
pgstattuple_approx是返回近似结果的
pgstattuple的更快的替代。
参数是目标关系的名称或OID。例如:
test=> SELECT * FROM pgstattuple_approx('pg_catalog.pg_proc'::regclass);
-[ RECORD 1 ]--------+-------
table_len | 573440
scanned_percent | 2
approx_tuple_count | 2740
approx_tuple_len | 561210
approx_tuple_percent | 97.87
dead_tuple_count | 0
dead_tuple_len | 0
dead_tuple_percent | 0
approx_free_space | 11996
approx_free_percent | 2.09输出字段列在表 F-22中描述。
pgstattuple总是执行全表扫描并返回活的和死的元组
(及其大小)和可用空间的精确计数,pgstattuple_approx
尝试避免全表扫描并返回精确的死元组统计数据以及活元组和自由空间的数量和大小的近似值。
它通过根据可见性映射跳过仅具有可见元组的页面(如果页面具有相应的VM位集, 则假定其不包含死元组)实现这点。对于这样的页面, 它从自由空间映射中导出可用空间值,并假设页面上的其余空间由活的元组占用。
对于不能跳过的页面,它会扫描每个元组,在适当的计数器中记录其存在和大小, 并加上页面上的可用空间。最后,它基于扫描的页面和元组的数量估计活的元组的总数 (以与VACUUM估计pg_class.reltuples相同的方式)。
表 F-22. pgstattuple_approx 输出字段
| 字段 | 类型 | 描述 |
|---|---|---|
| table_len | bigint | 以字节为单位的物理关系长度(精确) |
| scanned_percent | float8 | 已扫描表的百分比 |
| approx_tuple_count | bigint | 活元组数(估计) |
| approx_tuple_len | bigint | 活的元组的总长度(以字节为单位)(估计) |
| approx_tuple_percent | float8 | 活元组的百分比 |
| dead_tuple_count | bigint | 死元组数(精确) |
| dead_tuple_len | bigint | 死元组的总长度(以字节为单位)(精确) |
| dead_tuple_percent | float8 | 死元组的百分比 |
| approx_free_space | bigint | 总可用空间(以字节为单位)(估计) |
| approx_free_percent | float8 | 可用空间百分比 |
在上面的输出中,可用空间数字可能与pgstattuple
输出不完全匹配,因为自由空间映射给了我们一个确切的数字,但不能保证精确到字节。
Tatsuo Ishii、Satoshi Nagayasu和Abhijit Menon-Sen