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 <markir@paradise.net.nz>
撰写。
在版本8.4中重新编写,以适应Heikki Linnakangas <heikki@enterprisedb.com>
的新FSM实现。