uxstattuple_approx是uxstattuple的一个更加快速的替代品,它返回近似的结果。参数是目标关系的OID或者名称。例如:
test=> SELECT * FROM uxstattuple_approx('ux_catalog.ux_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
鉴于uxstattuple总是执行全表扫描并且返回存活和死亡元组的准确计数、尺寸和空闲空间,uxstattuple_approx尝试避免全表扫描并且返回死亡元组的准确统计信息,以及存活元组和空闲空间的近似数量及尺寸。
这个函数通过根据可见性映射跳过只包含可见元组的页面来实现这一目的(如果一个页面对应的VM位被设置,那么就说明该页面不含有死亡元组)。对于这样的页面,它会从空闲空间映射中得到空闲空间值,并且假定该页面上的剩余空间由存活元组占据。
对于不能被跳过的页面,它会扫描每个元组,在合适的计数器中记录它的存在以及尺寸,并且统计该页面上的空闲空间。最后,它会基于已扫描的页面和元组数量来估计存活元组的总数(采用与VACUUM估计ux_class.reltuples时相同的方法)。
表?16.5.?uxstattuple_approx输出列
列 | 类型 | 描述 |
---|---|---|
able_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 | 空闲空间的百分比。 |
在上述的输出中,空闲空间数据可能不完全匹配uxstattuple的输出,这是因为空闲空间映射会给出一个确切的数字,但是这个数字不能保证是准确的字节数。