F.27. pg_freespacemap

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

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

F.27.1. Functions

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

    • 根据 FSM 返回由blkno指定的关系页面上的可用空间量。
  • pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)

    • 根据 FSM,在关系的每一页上显示可用空间量。返回一组(blkno bigint, avail int2)Tuples,关系中的每个页面一个 Tuples。

可用空间图中存储的值不准确。将它们四舍五入到BLCKSZ的 1/256 的精度(32 字节,默认为BLCKSZ),并且在插入和更新 Tuples 时不能完全保持最新。

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

Note

接口在版本 8.4 中进行了更改,以反映同一版本中引入的新 FSM 实现。

F.27.2. samples 输出

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. Author

马克·柯克伍德(Mark Kirkwood)<[email protected]>的原始版本。在版本 8.4 中重写,以适合 Heikki Linnakangas <[email protected]>的新 FSM 实施