| PostgreSQL 9.3.1 中文手册 | ||||
|---|---|---|---|---|
| 上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页 | |
pg_buffercache模块提供实时检查共享缓存内发生了什么的用途。
该模块提供一个C函数pg_buffercache_pages,该函数返回一个记录集,
加上一个包裹该函数为了方便使用的视图pg_buffercache。
缺省情况下取消这两种的公共访问,以防隐藏的安全问题。
被视图暴露的字段的定义显示在表 F-14里。
表 F-14. pg_buffercache 字段
| 名字 | 类型 | 引用 | 描述 | 
|---|---|---|---|
| bufferid | integer | ID, 范围为 1..shared_buffers | |
| relfilenode | oid | pg_class.relfilenode | 关系的文件节点号 | 
| reltablespace | oid | pg_tablespace.oid | 关系的表空间OID | 
| reldatabase | oid | pg_database.oid | 关系的数据库OID | 
| relblocknumber | bigint | 关系的页码 | |
| relforknumber | smallint | 关系的分支编号; 参阅 include/storage/relfilenode.h | |
| isdirty | boolean | 页脏了吗? | |
| usagecount | smallint | 时钟下摆访问计数 | 
在共享缓存中每个缓冲区都有一行记录。未使用的缓冲区显示为所有字段为空,除了bufferid。 共享的系统目录显示为属于数据库零。
因为缓存被所有数据库共享,通常有几页的关系不属于当前数据库。 这意味着某些行在pg_class中没有匹配的连接行, 或者甚至有不正确的连接。如果你尝试连接pg_class, 限制连接到的行的reldatabase等于当前数据库的OID或0是个好主意。
当访问pg_buffercache视图时,认为内部缓冲区锁管理器足够长, 能够拷贝视图将显示的所有的缓冲区状态数据。这保证了视图产生一个一致的结果集, 当不再需要阻塞正常的缓冲区活动时。但是,如果频繁的阅读这个视图, 可能会对数据库性能造成一些影响。
regression=# SELECT c.relname, count(*) AS buffers
             FROM pg_buffercache b INNER 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()))
             GROUP BY c.relname
             ORDER BY 2 DESC
             LIMIT 10;
             relname             | buffers
---------------------------------+---------
 tenk2                           |     345
 tenk1                           |     141
 pg_proc                         |      46
 pg_class                        |      45
 pg_attribute                    |      43
 pg_class_relname_nsp_index      |      30
 pg_proc_proname_args_nsp_index  |      28
 pg_attribute_relid_attnam_index |      26
 pg_depend                       |      22
 pg_depend_reference_index       |      20
(10 rows)   Mark Kirkwood <markir@paradise.net.nz>
  
设计建议:Neil Conway <neilc@samurai.com>
调试建议:Tom Lane <tgl@sss.pgh.pa.us>