统计PostgreSQL缓存情况

可以通过以下步骤查询PostgreSQL数据的缓存情况。

1. 创建pg_buffercache扩展。

sde=# create extension pg_buffercache;
CREATE EXTENSION

2. 创建该extension后,后台会创建pg_buffercache视图用来记录缓存情况,其定义如下,实际上是简历在表函数上的一个视图

sde=# \d+ pg_buffercache
                          视图 "sde.pg_buffercache"
       栏位       |   类型   | Collation | Nullable | Default | 存储  | 描述
------------------+----------+-----------+----------+---------+-------+------
 bufferid         | integer  |           |          |         | plain |
 relfilenode      | oid      |           |          |         | plain |
 reltablespace    | oid      |           |          |         | plain |
 reldatabase      | oid      |           |          |         | plain |
 relforknumber    | smallint |           |          |         | plain |
 relblocknumber   | bigint   |           |          |         | plain |
 isdirty          | boolean  |           |          |         | plain |
 usagecount       | smallint |           |          |         | plain |
 pinning_backends | integer  |           |          |         | plain |
视图定义:
 SELECT p.bufferid,
    p.relfilenode,
    p.reltablespace,
    p.reldatabase,
    p.relforknumber,
    p.relblocknumber,
    p.isdirty,
    p.usagecount,
    p.pinning_backends
   FROM pg_buffercache_pages() p(bufferid integer, relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, isdirty boolean, usagecount smallint, pinning_backends integer);

relfilenode 表示文件的oid,与pg_class的relfilenode对应

reltablespace代表表空间的oid,与pg_tablespace的oid对应

reldatabase代表database的oid,与pg_database的oid对应

relforknumber代表被缓存是表的哪个部分,堆,空闲空间映射还是可见性映射表

relblocknumber代表被缓存的块号

isdirty代表该快是否为脏块

3. 查询每个数据库中缓存的概要情况

sde=# select datname,count(*),count(*) filter(where isdirty=true) as dirty from pg_buffercache as b,pg_database as d where d.oid=b.reldatabase group by rollup(1) order by 1 asc nulls last;
  datname  | count | dirty
-----------+-------+-------
 postgres  |    59 |     0
 sde       |  1390 |     0
 sde1      |    62 |     0
 template1 |    59 |     0
 test      |    59 |     0
           |  1629 |     0

4. 查询某个数据中的表的缓存情况

sde=# select relname,relkind,count(*) as count,count(*) filter(where isdirty=true) as dirtycount from pg_buffercache as b,pg_database as d,pg_class as c where d.oid=b.reldatabase and c.relfilenode=b.relfilenode and datname='sde' group by 1,2  order by 3 desc nulls first limit 10;
          relname          | relkind | count | dirtycount
---------------------------+---------+-------+------------
 testddd                   | r       |  3420 |       2501
 pg_statistic              | r       |    35 |          1
 pg_depend                 | r       |    16 |          0
 pg_operator               | r       |    15 |          0
 pg_depend_reference_index | i       |    15 |          0
 pg_index                  | r       |    13 |          0
 pg_depend_depender_index  | i       |     8 |          0
 pg_toast_2619             | t       |     8 |          2
 pg_amop                   | r       |     7 |          0
 pg_rewrite                | r       |     7 |          0

5. checkpoint下,发现testddd表中的dirty为0了

sde=# checkpoint;
CHECKPOINT
sde=# select relname,relkind,count(*) as count,count(*) filter(where isdirty=true) as dirtycount from pg_buffercache as b,pg_database as d,pg_class as c where d.oid=b.reldatabase and c.relfilenode=b.relfilenode and datname='sde' group by 1,2  order by 3 desc nulls first limit 10;
          relname          | relkind | count | dirtycount
---------------------------+---------+-------+------------
 testddd                   | r       |  3420 |          0
 pg_statistic              | r       |    38 |          0
 pg_operator               | r       |    16 |          0
 pg_depend                 | r       |    16 |          0
 pg_depend_reference_index | i       |    15 |          0
 pg_index                  | r       |    13 |          0
 pg_depend_depender_index  | i       |     8 |          0
 pg_toast_2619             | t       |     8 |          0
 pg_amop                   | r       |     7 |          0
 pg_rewrite                | r       |     7 |          0

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值