pg_freespacemap模块提供了一种检查空闲空间映射(FSM)的方法。
它提供了一个名为pg_freespace的函数,或者更准确地说,提供了两个重载函数。
这些函数显示了给定页面或关系中所有页面记录在空闲空间映射中的值。
默认情况下,使用受限于超级用户和具有pg_stat_scan_tables角色特权的角色。
可以使用GRANT授予其他用户访问权限。
存储在空闲空间映射中的值不准确。它们被圆整到BLCKSZ的 1/256(对于默认的BLCKSZ是 32 字节),并且在元组被插入和更新时它们不会被实时更新。
对于索引,跟踪的是完全未使用的页面,而不是页面内的空闲空间。 因此,这些值没有实际意义,只表示页面是被使用还是空闲。
postgres=# SELECT * FROM pg_freespace('foo');
blkno | avail
-------+-------
0 | 0
1 | 0
2 | 0
3 | 32
4 | 704
5 | 704
6 | 704
7 | 1216
8 | 704
9 | 704
10 | 704
11 | 704
12 | 704
13 | 704
14 | 704
15 | 704
16 | 704
17 | 704
18 | 704
19 | 3648
(20 rows)
postgres=# SELECT * FROM pg_freespace('foo', 7);
pg_freespace
--------------
1216
(1 row)
原始版本由Mark Kirkwood <[email protected]>撰写。
在版本8.4中重新编写,以适应Heikki Linnakangas <[email protected]>的新FSM实现。