F.25. pg_buffercache

pg_buffercache模块提供了一种实时检查共享缓冲区高速缓存中发生的情况的方法。

该模块提供了一个 C 函数pg_buffercache_pages,该函数返回一组记录,以及一个视图pg_buffercache,该视图包装了该函数以方便使用。

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

F.25.1. pg_buffercache 视图

该视图公开的列的定义在Table F.16中显示。

表 F.16.pg_buffercache

NameTypeReferencesDescription
bufferidinteger ID,范围为 1.。shared_buffers
relfilenodeoidpg_class.relfilenode关系的文件节点号
reltablespaceoidpg_tablespace.oid关系的表空间 OID
reldatabaseoidpg_database.oid关系的数据库 OID
relforknumbersmallint 关系内的货叉号;见include/common/relpath.h
relblocknumberbigint 关系内的页码
isdirtyboolean 页面脏了吗?
usagecountsmallint 时钟扫描访问计数
pinning_backendsinteger 固定此缓冲区的后端数

共享缓存中的每个缓冲区都有一行。显示未使用的缓冲区,除bufferid之外的所有字段均为空。共享的系统目录显示为属于数据库零。

因为所有数据库都共享高速缓存,所以通常会有不属于当前数据库的关系中的页面。这意味着某些行中的pg_class中可能没有匹配的联接行,甚至可能有不正确的联接。如果您要针对pg_class进行联接,则最好将联接限制为reldatabase等于当前数据库的 OID 或零的行。

由于不使用缓冲区 Management 器锁来复制视图将显示的缓冲区状态数据,因此访问pg_buffercache视图对正常缓冲区活动的影响较小,但不会在所有缓冲区中提供一致的结果集。但是,我们确保每个缓冲区的信息都是自洽的。

F.25.2. samples 输出

regression=# SELECT n.nspname, c.relname, count(*) AS buffers
             FROM pg_buffercache b JOIN pg_class c
             ON b.relfilenode = pg_relation_filenode(c.oid) AND
                b.reldatabase IN (0, (SELECT oid FROM pg_database
                                      WHERE datname = current_database()))
             JOIN pg_namespace n ON n.oid = c.relnamespace
             GROUP BY n.nspname, c.relname
             ORDER BY 3 DESC
             LIMIT 10;

  nspname   |        relname         | buffers
------------+------------------------+---------
 public     | delete_test_table      |     593
 public     | delete_test_table_pkey |     494
 pg_catalog | pg_attribute           |     472
 public     | quad_poly_tbl          |     353
 public     | tenk2                  |     349
 public     | tenk1                  |     349
 public     | gin_test_idx           |     306
 pg_catalog | pg_largeobject         |     206
 public     | gin_test_tbl           |     188
 public     | spgist_text_tbl        |     182
(10 rows)

F.25.3. Authors

马克·柯克伍德<[email protected]>

设计建议:Neil Conway <[email protected]>

调试建议:Tom Lane <[email protected]>