支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: 开发版
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.27. pg_freespacemap — 检查可用空间映射 #

pg_freespacemap 模块提供了一种检查可用空间映射FSM)的方法。它提供了一个名为 pg_freespace 的函数,或者准确地说,是两个重载的函数。这些函数显示可用空间映射中为给定页面或关系中的所有页面记录的值。

默认情况下,使用权限仅限于超级用户和具有 pg_stat_scan_tables 角色的权限的角色。可以使用 GRANT 将访问权限授予其他人。

F.27.1. 函数 #

pg_freespace(rel regclass IN, blkno bigint IN) returns int2

根据关系指定页面blkno,返回页面上的可用空间量。FSM.

pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)

根据每个关系页面的可用空间量进行显示。FSM返回一组 (blkno bigint, avail int2) 元组,关系中的每个页面对应一个元组。

可用空间映射中存储的值不是精确的。它们被四舍五入到 BLCKSZ 的 1/256 精度(默认 BLCKSZ 为 32 字节),并且在插入和更新元组时不会完全保持最新。

对于索引,跟踪的是完全未使用的页面,而不是页面内的可用空间。因此,这些值没有意义,只是表示一个页面是满的还是空的。

F.27.2. 示例输出 #

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)

F.27.3. 作者 #

Mark Kirkwood 的原始版本 。在 8.4 版本中重写以适应新的FSMHeikki Linnakangas 的实现

提交更正

如果您在文档中发现任何不正确、与您使用特定功能时的体验不符或需要进一步澄清的内容,请使用此表格报告文档问题。