On this page
F.26. pg_freespacemap
pg_freespacemap
模块提供了一种检查自由空间图(FSM)的方法。确切地说,它提供了一个名为pg_freespace
的函数或两个重载函数。这些函数显示给定页面或关系中所有页面的自由空间 Map 中记录的值。
默认情况下,仅限超级用户和pg_stat_scan_tables
角色成员使用。可以使用GRANT
将访问权限授予其他人。
F.26.1. Functions
pg_freespace(rel regclass IN, blkno bigint IN) returns int2
- 根据 FSM 返回由
blkno
指定的关系页面上的可用空间量。
- 根据 FSM 返回由
pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)
- 根据 FSM,在关系的每一页上显示可用空间量。返回一组
(blkno bigint, avail int2)
Tuples,关系中的每个页面一个 Tuples。
- 根据 FSM,在关系的每一页上显示可用空间量。返回一组
可用空间图中存储的值不准确。将它们四舍五入到BLCKSZ
的 1/256 的精度(32 字节,默认为BLCKSZ
),并且在插入和更新 Tuples 时不能完全保持最新。
对于索引,跟踪的是完全未使用的页面,而不是页面内的可用空间。因此,这些值没有意义,只是页面已满还是为空。
Note
接口在版本 8.4 中进行了更改,以反映同一版本中引入的新 FSM 实现。
F.26.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.26.3. Author
马克·柯克伍德(Mark Kirkwood)<markir@paradise.net.nz>
的原始版本。在版本 8.4 中重写,以适合 Heikki Linnakangas <heikki@enterprisedb.com>
的新 FSM 实施