跳到主要内容
版本:Next

pg_freespacemap

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

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

1. 函数

pg_freespace(rel regclass IN, blkno bigint IN) 返回 int2

根据 FSM,返回由blkno指定的关系页面上的空闲空间总量。

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

根据 FSM,显示关系的每个页面上的空闲空间总量。一个(blkno bigint, avail int2)元组的集合会被返回,每一个元组对应关系中的一个页面。

存储在空闲空间映射中的值不准确。它们被圆整到BLCKSZ的 1/256(对于默认的BLCKSZ是 32字节),并且在元组被插入和更新时它们不会被实时更新。

对于索引,被跟踪的是整个没有使用的页面,而不是页面中的空闲空间。因此,这些值可能没有意义,只是表示一个页面是满的还是空的。

2. 样例输出

test=## 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)



text=## SELECT * FROM pg_freespace('foo', 7);

pg_freespace

--------------

1216

(1 row)