zoukankan      html  css  js  c++  java
  • 使用pg_buffercache查看缓存区缓存

    PG提供了一个扩展pg_buffercache来查看缓存区的内容。

    create database test;
    CREATE DATABASE
    
    create extension pg_buffercache ;
    CREATE EXTENSION

    创建个测试数据库test,并且添加扩展。

    psql -d test
    
    test=# select distinct reldatabase from pg_buffercache ;
     reldatabase 
    -------------
                
           16394
           13322
               0
    (4 rows)
    

     在缓存区中找到两个数据库的内容,带0的记录表示缓存区未使用。

    test=# ! oid2name
    All databases:
        Oid  Database Name  Tablespace
    ----------------------------------
      13322       postgres  pg_default
      13321      template0  pg_default
          1      template1  pg_default
      16394           test  pg_default
    

     通过SQL更直观的来看一下:

    select 
    c.relname,
    count(*) 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;
    
                  relname              | buffers 
    -----------------------------------+---------
     pg_operator                       |      14
     pg_depend_reference_index         |      12
     pg_depend                         |      10
     pg_rewrite                        |       6
     pg_description                    |       6
     pg_amop                           |       5
    

     这些内容,都是数据字典视图。

    test=# create table lsang(id serial,name varchar(20));
    CREATE TABLE
    
    test=# insert into lsang(name) values('Michael');
    INSERT 0 1
    
    test=# select * from lsang;
     id |  name   
    ----+---------
      1 | Michael
    (1 row)
    
    
    select 
    c.relname,
    count(*) 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 
    --------------+---------
     lsang        |       1
     lsang_id_seq |       1
    (2 rows)
    

     创建表并插入数据,我们通过pg_buffercache能够查询到buffers。

    我们来看看数据缓存区是否为脏的。

    select 
    c.relname,
    b.isdirty
    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%' ;
       relname    | isdirty 
    --------------+---------
     lsang_id_seq | f
     lsang        | f
    

    注意,isdirty标记的为f:

    test=# update lsang  set name = 'Michael.Sang';
    UPDATE 1
    再次查询结果: relname | isdirty --------------+--------- lsang_id_seq | f lsang | t (2 rows)

    结果告诉我们,缓存区是脏的,我们可以强制设置个检查点:

    test=# checkpoint ;
    CHECKPOINT
    

     重复上面查询:

       relname    | isdirty 
    --------------+---------
     lsang_id_seq | f
     lsang        | f
    (2 rows)
    

     这样缓存区就不再是脏的了。

  • 相关阅读:
    CentOS6.9依赖包快速安装指南
    CentOS 6.5安装部署Zabbix 3.05指南
    Nginx最佳安装与优化
    Linux Bonding最优配置
    macOS下用命令行发邮件
    Linux iperf网络性能测试
    MTR网络诊断自动脚本实例
    nmon监控linux资源使用情况
    思科HSRP配置实例
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/sangli/p/5689723.html
Copyright © 2011-2022 走看看