pg_buffercache 是一个 contrib 模块,它提供有关共享缓冲区缓存的实时统计信息。
pg_buffercache 在 PostgreSQL 8.1 中添加。
扩展对象
pg_buffercache 提供了一个函数 pg_buffercache_pages(),以及一个方便的视图 pg_buffercache,用于返回有关服务器共享缓冲区缓存状态的信息。
视图和扩展都将为每个共享缓冲区返回一个记录。请注意,可能会为另一个数据库正在使用的缓冲区返回记录。
从 PostgreSQL 16 开始,还提供了以下函数:
pg_buffercache_summary()pg_buffercache_usage_counts()
从 PostgreSQL 17 开始,还提供了以下开发函数:
pg_buffercache_evict()
变更历史
- PostgreSQL 18
- PostgreSQL 17
- 添加了函数
pg_buffercache_evict()(提交 13453eed)
- 添加了函数
- PostgreSQL 16
- PostgreSQL 10
- 修改为使用更少的锁运行(提交 6e654546)
- PostgreSQL 9.5
- 向
pinning_backends列添加了显示缓冲区 pin 信息的(提交 f5779198)
- 向
- PostgreSQL 8.3
- 添加了
usagecount列以显示使用计数统计信息(提交 b0194ab1)
- 添加了
- PostgreSQL 8.1
- 添加(提交 de004e44)
示例
获取特定表的示例输出
postgres=# SELECT * FROM pg_buffercache WHERE relfilenode = pg_relation_filenode('foo') LIMIT 1\x\g\x
-[ RECORD 1 ]----+------
bufferid | 1962
relfilenode | 19246
reltablespace | 1663
reldatabase | 11134
relforknumber | 0
relblocknumber | 0
isdirty | f
usagecount | 5
pinning_backends | 0
仅提取当前数据库中表的记录的查询
SELECT n.nspname, c.relname, bc.*
FROM pg_buffercache bc
INNER JOIN pg_class c ON c.oid=pg_filenode_relation(bc.reltablespace, bc.relfilenode)
INNER JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE bc.reldatabase = (SELECT oid FROM pg_database WHERE datname = current_database())
ORDER BY 1,2;
参考资料
- PostgreSQL 文档: pg_buffercache
