暂无图片
pg中有没有将shared_buffer 设计成类似mysql那种,分成热区和冷区呢?
我来答
分享
暂无图片 匿名用户
pg中有没有将shared_buffer 设计成类似mysql那种,分成热区和冷区呢?

pg中有没有将shared_buffer 设计成类似mysql那种,分成热区和冷区呢?


innodb_old_blocks_pct 参数控制冷区的比例,默认是37%

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
大树666

你说的应该是lru算法和midpoint吧,pg数据库在较早的版本也是lru算法,但是在后来的版本弃用了,采用了时钟扫描算法。

简单的说,可以将shared_buffer想象成一个圆圈,pg数据库的源码中有个函数会一直转圈的扫描shared_buffer中的每一个槽。

这个槽中标识符有个usage_count(表示被加载到缓冲池槽中使用的次数)。当函数扫描到标识符会判断有个标识符有没有被“钉住”就是是不是正在使用,如果正在使用就跳过。如果没有使用就将usage_count减一。一直减到0变成“受害者页面”。将这个页面踢出缓冲池。

暂无图片 评论
暂无图片 有用 0
大树666
答主
2024-05-07
当函数扫描到标识符会判断有个标识符有没有被“钉住”,是“这个”不是“有个”。
lianR

PostgreSQL的shared_buffer并没有类似MySQL的设计,将其分为热区和冷区。PostgreSQL的shared_buffer是一个全局的缓冲区,所有的数据库连接都会共享这个缓冲区。当一个数据库连接需要读取或写入数据时,它会首先查找shared_buffer中是否有所需的数据,如果有,则直接从缓冲区中读取,如果没有,则需要从磁盘中读取数据并将其加载到shared_buffer中。

PostgreSQL的缓冲区管理策略主要是基于LRU(Least  Recently  Used)算法,即最近最少使用的数据会被优先替换出缓冲区。这种策略并没有明确的将缓冲区分为热区和冷区,而是根据数据的使用频率来动态调整数据在缓冲区中的位置。

虽然PostgreSQL没有提供类似innodb_old_blocks_pct这样的参数来控制缓冲区的热区和冷区,但是它提供了一些其他的参数来调整缓冲区的行为,例如shared_buffers参数用来设置缓冲区的大小,effective_cache_size参数用来估计操作系统和磁盘缓存可以提供多少缓存空间等。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏