zoukankan      html  css  js  c++  java
  • PostgreSQL之Buffer Cache

    缓冲区高速缓存(Buffer Cache)位于服务器的共享内存中,并且所有进程均可访问。在读取或更新数据时,进程将页面读入缓存。当页面位于缓存中时,我们在RAM中使用它并保存数据到磁盘。

    当一个进程需要读取一个页面时,它首先尝试通过哈希表在Buffer Cache中找到它,如果在Buffer Cache中找不到所需的页面。在这种情况下,需要将页面从磁盘读取到某个缓冲区中。

    PostgreSQL有一个扩展,使我们能够查看缓冲区高速缓存的内部。

    • 安装扩展

    1)开启postgresql 服务

    2)进入:contrib/pg_buffercache 目录

    3)运行 :gmake  然后,运行 gmake install

    4)再运行 psql , 在psql 状态下,运行:create extension pg_buffercache

    • 创建一个表并插入一行数据

    create table t_cache(id int) WITH (autovacuum_enabled = off);
    insert into t_cache values (1);
    • 查询在缓冲区都包含什么

    SELECT bufferid,
      CASE relforknumber
        WHEN 0 THEN 'main'
        WHEN 1 THEN 'fsm'
        WHEN 2 THEN 'vm'
      END relfork,
      relblocknumber,
      isdirty,
      usagecount,
      pinning_backends
    FROM pg_buffercache
    WHERE relfilenode = pg_relation_filenode('t_cache'::regclass);

    可以看到,缓冲区包含一页。它是脏的(isdirty),使用计数(usagecount)等于1,并且该页面没有被任何进程(pinning_backends)固定。

    • 新建一个session,再次插入一行数据,查询此时缓冲区内容

    insert into t_cache values (2);

    可以看到使用计数增加了

    • 执行查询,查看缓冲区内容变化

    postgres=>select * from t_cache ;
     id
    ----
      1
      2
    (2 rows)

    可知,阅读页面后,计数也会增加。

    • 执行vacuum,查看缓冲区变化

    vacuum t_cache ;

    VACUUM创建了空闲空间映射(fsm)(一页)和可见性映射(vm)(三页)。

    • 如何调整缓冲区大小

    可以使用shared_buffers参数设置缓存大小。默认值为128 MB

    SELECT setting, unit FROM pg_settings WHERE name = 'shared_buffers';
     

    设置为多少合适,目前pg的推荐是约1/4的RAM。

    但行好事,莫问前程
  • 相关阅读:
    DOCTYPE声明
    JS获取对象宽度和高度
    在Flash中巧妙替换字体
    web.config 配置兼容 IIS7 II6
    防刷新重复提交/防后退方法
    iframe自适应,跨域,JS的document.domain
    JS动态创建Table IE不显示Fix
    C#简繁转换
    用TransactSQL 命令压缩数据库
    JS内置对象[转载]
  • 原文地址:https://www.cnblogs.com/mingfan/p/14770616.html
Copyright © 2011-2022 走看看