↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

F.21. pg_freespacemap #

pg_freespacemap模块提供了查看空闲空间映射(FSM)内容的方法。它提供了两个 C 函数:pg_freespacemap_relations和pg_freespacemap_pages,各自返回一组记录,另外还提供了包装这两个函数以便于使用的两个视图pg_freespacemap_relations和pg_freespacemap_pages。

出于对潜在安全问题的防范,默认情况下这两个函数和视图的公共访问权限都被撤销。

F.21.1. pg_freespacemap的视图

这些视图暴露的列的定义如下:

表 F.23. pg_freespacemap_relations的列

名称 类型 引用 描述
reltablespace oid pg_tablespace.oid 关系的表空间 OID
reldatabase oid pg_database.oid 关系的数据库 OID
relfilenode oid pg_class.relfilenode 关系的 relfilenode
avgrequest integer   空闲空间请求的移动平均(对索引为 NULL)
interestingpages integer   最近一次报告为含有可用空闲空间的页数
storedpages integer   实际存储在空闲空间映射中的页数
nextpage integer   下一次搜索从其开始的页索引(从 0 计)

表 F.24. pg_freespacemap_pages的列

名称 类型 引用 描述
reltablespace oid pg_tablespace.oid 关系的表空间 OID
reldatabase oid pg_database.oid 关系的数据库 OID
relfilenode oid pg_class.relfilenode 关系的 relfilenode
relblocknumber bigint   关系内的页号
bytes integer   页中的空闲字节数,对索引页为 NULL(见下文)

对于pg_freespacemap_relations,空闲空间映射中的每个关系对应一行。storedpages是实际存储在映射中的页数,而interestingpages是最近一次VACUUM认为含有足量空闲空间的页数。

如果storedpages持续小于interestingpages,那么增大max_fsm_pages会是一个好主意。同样,如果pg_freespacemap_relations中的行数接近max_fsm_relations,就应当考虑增大max_fsm_relations。

对于pg_freespacemap_pages,空闲空间映射中的每一页对应一行。某个关系的行数将与pg_freespacemap_relations中该关系的storedpages列一致。

对于索引,被跟踪的是完全未使用的页,而不是页内空闲空间。因此,平均请求大小和页内空闲字节数没有意义,显示为 NULL。

由于该映射为所有数据库共享,通常会有不属于当前数据库的关系的条目。这意味着某些行在pg_class中可能没有可匹配的连接行,甚至可能产生错误的连接。如果你打算与pg_class做连接,最好把连接限制在reldatabase等于当前数据库 OID 或零的行上。

访问任何一个视图时,都会在足够长的时间内持有内部的空闲空间映射锁,以复制该视图要显示的全部状态数据。这确保了视图能产生一致的结果集,同时又不会比必要的更久地阻塞正常活动。尽管如此,如果频繁读取它们,仍可能对数据库性能产生一定影响。

F.21.2. 示例输出

regression=# SELECT c.relname, r.avgrequest, r.interestingpages, r.storedpages
             FROM pg_freespacemap_relations r INNER JOIN pg_class c
             ON r.relfilenode = c.relfilenode AND
                r.reldatabase IN (0, (SELECT oid FROM pg_database
                                      WHERE datname = current_database()))
             ORDER BY r.storedpages DESC LIMIT 10;
             relname             | avgrequest | interestingpages | storedpages
---------------------------------+------------+------------------+-------------
 onek                            |        256 |              109 |         109
 pg_attribute                    |        167 |               93 |          93
 pg_class                        |        191 |               49 |          49
 pg_attribute_relid_attnam_index |            |               48 |          48
 onek2                           |        256 |               37 |          37
 pg_depend                       |         95 |               26 |          26
 pg_type                         |        199 |               16 |          16
 pg_rewrite                      |       1011 |               13 |          13
 pg_class_relname_nsp_index      |            |               10 |          10
 pg_proc                         |        302 |                8 |           8
(10 rows)

regression=# SELECT c.relname, p.relblocknumber, p.bytes
             FROM pg_freespacemap_pages p INNER JOIN pg_class c
             ON p.relfilenode = c.relfilenode AND
                p.reldatabase IN (0, (SELECT oid FROM pg_database
                                      WHERE datname = current_database()))
             ORDER BY c.relname LIMIT 10;
   relname    | relblocknumber | bytes
--------------+----------------+-------
 a_star       |              0 |  8040
 abstime_tbl  |              0 |  7908
 aggtest      |              0 |  8008
 altinhoid    |              0 |  8128
 altstartwith |              0 |  8128
 arrtest      |              0 |  7172
 b_star       |              0 |  7976
 box_tbl      |              0 |  7912
 bt_f8_heap   |             54 |  7728
 bt_i4_heap   |             49 |  8008
(10 rows)
  

F.21.3. 作者

Mark Kirkwood

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。