# F.25.pg_缓冲缓存

F.25.1.这个pg_缓存看法F.25.2.样本输出F.25.3.作者

这个pg_缓存模块提供了一种实时检查共享缓冲区缓存中发生了什么的方法。

该模块提供C函数pg_缓存_页面返回一组记录和一个视图pg_缓存为了方便使用,它对功能进行了包装。

默认情况下,使用仅限于超级用户和pg_监视器角色其他人可以使用授予.

# F.25.1.那个pg_缓存看法

视图显示的列的定义如所示表F.15.

表F.15.pg_缓存

列类型

描述
缓冲ID 整数

ID,范围为1.。共享缓冲区
重新文件节点 老年人(参考文献)pg_类.重新文件节点)

关系的Filenode编号
表空间 老年人(参考文献)pg_表空间.老年人)

关系的表空间OID
rel数据库 老年人(参考文献)pg_数据库.老年人)

关系的数据库OID
重新分配号码 短整型

关系中的叉号;看见公共/重路径。H
重新分组号码 比基特

关系中的页码
伊斯迪蒂 布尔值

这页脏了吗?
用法计数 短整型

时钟扫描访问计数
钉住后端 整数

固定此缓冲区的后端数

共享缓存中的每个缓冲区都有一行。未使用的缓冲区显示为空,除缓冲ID.共享系统目录显示为属于数据库0.

由于缓存由所有数据库共享,因此通常会有来自不属于当前数据库的关系的页面。这意味着在中可能没有匹配的联接行pg_类对于某些行,甚至可能存在不正确的联接。如果你想加入反对pg_类,将连接限制为具有rel数据库等于当前数据库的OID或零。

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

# F.25.2.样本输出

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
### F.25.3. Authors

 Mark Kirkwood `<[markir@paradise.net.nz](mailto:markir@paradise.net.nz)>`

 Design suggestions: Neil Conway `<[neilc@samurai.com](mailto:neilc@samurai.com)>`

 Debugging advice: Tom Lane `<[tgl@sss.pgh.pa.us](mailto:tgl@sss.pgh.pa.us)>`