pg_buffercache

  作者:瀚高PG实验室 (Highgo PG Lab)- 丹心明月

  查看缓冲区缓存的内容:  
    create extension pg_buffercache;  
      
    select c.relname, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oid and d.datname=current_database()) group by c.relname order by 2 desc;  
    -[ RECORD 1 ]------------------------------  
    relname | pg_depend_reference_index  
    buffers | 12  
    -[ RECORD 2 ]------------------------------  
    relname | pg_depend  
    buffers | 10  
    -[ RECORD 3 ]------------------------------  
    relname | pg_rewrite  
    buffers | 6  
    -[ RECORD 4 ]------------------------------  
    relname | pg_extension  
    buffers | 5  
    -[ RECORD 5 ]------------------------------  
    relname | pg_init_privs  
    buffers | 5  
    -[ RECORD 6 ]------------------------------  
    relname | pg_statistic  
    buffers | 5  
    -[ RECORD 7 ]------------------------------  
    relname | pg_amop  
    buffers | 5  
    -[ RECORD 8 ]------------------------------  
    relname | pg_operator_oprname_l_r_n_index  
    buffers | 5  
    -[ RECORD 9 ]------------------------------  
    relname | pg_depend_depender_index  
    buffers | 5  
      
    缓存的都是数据字典视图。  
      
    排除掉此类视图 :  
      
    select c.relname, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oid and d.datname=current_database()) where c.relname not like 'pg%' group by c.relname order by 2 desc;  
      
     relname | buffers  
    ---------+---------  
    (0 rows)  
      
    创建自己的表,然后插入记录:  
    create table test(id numeric,name text);  
      
    insert into test values(1,'dxmy');  
    test=# select * from test;  
     id | name  
    ----+------  
      1 | dxmy  
    (1 row)  
      
    然后再查询:  
    test=# select c.relname,b.isdirty, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oid and d.datname=current_database()) where c.relname not like 'pg%' group by c.relname,b.isdirty order by 2 desc;  
     relname | isdirty | buffers  
    ---------+---------+---------  
     test    | t       |       1  
    (1 row)  
      
    发现我们新建的表及插入的数据缓存了:  
    其中,isdirty是f,意思就是不脏,来修改一下:  
    update test set id=2;  
    test=# update test set id=2;  
    UPDATE 1  
      
    再查一次:  
    test=# select c.relname,b.isdirty, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oid and d.datname=current_database()) where c.relname not like 'pg%' group by c.relname,b.isdirty order by 2 desc;  
     relname | isdirty | buffers  
    ---------+---------+---------  
     test    | t       |       1  
    (1 row)  
      
    isdirty变为了t,说明是脏数据了。  
    来个检查点:  
    test=# checkpoint;  
    CHECKPOINT  
      
    再查一次:  
    test=# select c.relname,b.isdirty, count(1) as buffers from pg_class c join pg_buffercache b on b.relfilenode=c.relfilenode inner join pg_database d on (b.reldatabase=d.oid and d.datname=current_database()) where c.relname not like 'pg%' group by c.relname,b.isdirty order by 2 desc;  
     relname | isdirty | buffers  
    ---------+---------+---------  
     test    | f       |       1  
    (1 row)  
      
    又不脏了。  
      
    有兴趣可以自己做实验玩。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值