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 17
- 函数
pg_buffercache_evict()
添加 (提交 13453eed)
- 函数
- PostgreSQL 16
- PostgreSQL 10
- 修改为使用更少的锁运行 (提交 6e654546)
- PostgreSQL 9.5
pinning_backends
列添加以显示有关缓冲区固定信息 (提交 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