E.11. lt_freespacemap

E.11.1. 函数
E.11.2. 示例输出

lt_freespacemap 模块提供了一种检查自由空间图(FSM)的方法。它提供了一个名为 pg_freespace 的函数(或两个重载的函数),用于显示给定页面或关系中所有页面的自由空间图中记录的值。

默认情况下,只允许超级用户和pg_stat_scan_tables角色的成员使用。可以使用GRANT授权给其他用户。

E.11.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 精度(默认情况下为32字节),并且在插入和更新元组时不会完全更新。

对于索引,跟踪的是完全未使用的页面,而不是页面内的自由空间。因此,这些值没有实际意义,只是用于判断页面是否为空或已满。

E.11.2. 示例输出

lightdb@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)

lightdb@postgres=# SELECT * FROM pg_freespace('foo', 7);
 pg_freespace 
--------------
         1216
(1 row)