PG使用插件pg_buffercache查询缓冲区数据

0    697    7

Tags:

👉 本文共约1571个字,系统预计阅读时间或需6分钟。

pg_buffercache

pg_buffercache模块提供了一种方法实时检查共享缓冲区。

该模块提供了一个 C 函数pg_buffercache_pages,它返回一个记录的集合,外加一个包装了该函数以便于使用的视图pg_buffercache

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

安装

pg_buffercache视图

表 F.15. pg_buffercache

列类型描述
bufferid integerID,在范围 1..shared_buffers
relfilenode oid (references pg_class.relfilenode)关系的文件结点编号
reltablespace oid (references pg_tablespace.oid)关系的表空间 OID
reldatabase oid (references pg_database.oid)关系的数据库 OID
relforknumber smallint关系内的分叉数,见include/common/relpath.h
relblocknumber bigint关系内的页面数
isdirty boolean页面是否为脏?
usagecount smallintClock-sweep 访问计数
pinning_backends integer对这个缓冲区加 pin 的后端数量

共享缓存中的每一个缓冲区都有一行。没有使用的缓冲区的行中只有bufferid为非空。共享的系统目录被显示为属于数据库零。

因为缓冲是所有数据库共享的,通常会有不属于当前数据库的关系的页面。这意味着对于一些行在pg_class中可能不会有匹配的连接行,或者甚至有错误的连接。如果你试图与pg_class连接,将连接限制于reldatabase等于当前数据库 OID 或零的行是一个好主意。

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

样例输出

清空shared buffers

方法一:需要停机:

方法二:使用pg_dropcache插件:https://github.com/zilder/pg_dropcache

pg_dropcache is a PostgreSQL extension that invalidates shared_buffers cache

Installation

To install pg_dropcache clone this repository and run:

Then in psql (or any other client) execute:

Usage

WARNING: Dirty pages will be just dropped, therefore they won't be flushed on the disk! It should be used with extreme caution!

To clear whole buffer cache run:

To clear cache buffers for just a single relation:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

If you need to clear a specific buffer cache, you can specify it as second parameter:

fork can have one of the following values:

  • 'main'
  • 'vm'
  • 'fsm'
  • 'init'

Have fun!

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部