暂无图片
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
打赏 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
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
PostgreSQL数据库删库前是不是需要把所有连接断开才能删除?
回答 3
已采纳
在PostgreSQL中,如果一个库正在被使用,我们是无法直接去删除的,会收到如下报错:bill@bill>dropdatabasedb03;ERROR:database"db03&q
PG是我们的gaussdb不?分不清,都一样的命令
回答 2
已采纳
PG和GaussDB是两个不同的数据库产品。GaussDB是华为公司自主研发的关系型数据库产品,具有高可靠、高性能、高扩展性等特点,适用于大规模的分布式数据库场景。PG(PostgreSQL)是一个开
在PostgresSQL V10 中,WAL日志保存在 pg_wal 中,每个wal文件默认是多大? A 16MB B 64MB C 32MB D 8MB
回答 1
已采纳
A每个wal文件默认是16MB
pg中行锁的实现方式是哪种?oracle是在数据块上,mysql是索引上
回答 1
pg中,这两个会话不会阻塞。在pg中,行锁信息保存在数据块中,通常只在tuple的头部中设置标识位来标识记录此行已被锁,标识位为xmax和infomask,xmax放置当前事务的xid,infomas
postgresql insert会有延迟吗?刚插入就去查询
回答 1
已采纳
没有延迟,提交了就能看到。自己会话不提交也能看到。
PG 使用Mysql_fdw外部表访问mysql的表
回答 3
已采纳
查看mysqlfdw插件2.6.1releasenote,有如下一条新增特性:AddsreconnectoptiontocontrolautomaticreconnectiontoMySQLserve
postgresql 能不能通过某种方式,忽略其中的条件值?
回答 1
举个例子
Pg用进程的模式,用内存是不是很大?
回答 1
数据库都用内存大
postgres_fdw这个扩展,可以实现从pg到oracle、mysql的跨库吗?
回答 1
不能,跨到oracle要用oraclefdw,跨到mysql要用mysqlfdw
求:Postgresql如何快速插入几十万条数据,数据是通过解析JSON得到 有什么方法,能够快速且准确的插入这些数据?
回答 1
先创建一个临时表,使用copy命令导入所有的json数据。然后再把其中需要的内容导入到目标表中。createtabletmp01(tmpcontentjson);copytmp01from‘XXX.c
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~