微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)固定。

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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐