首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vacuum_cost_page_miss设置为零

vacuum_cost_page_miss设置为零
EN

Stack Overflow用户
提问于 2020-10-27 05:41:00
回答 2查看 418关注 0票数 1

在RDS PostgreSQL实例中,下面是真空参数集。

代码语言:javascript
复制
autovacuum_vacuum_cost_delay    5
autovacuum_vacuum_cost_limit    3000
vacuum_cost_page_dirty          20
vacuum_cost_page_hit            1
vacuum_cost_page_miss           0

根据我从这个博客中了解到的- https://www.2ndquadrant.com/en/blog/autovacuum-tuning-basics/,如果页面处于共享缓冲区或不处于共享缓冲区中,则需要付出相应的代价。如果vacuum_cost_page_miss设置为零,我认为它将假定从磁盘读取的成本是免费的,并且由于成本限制设置为3000,因此自动真空将执行大量IO,直到达到成本极限。我的理解正确吗?如果将这个参数设置为0,它还意味着什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-27 14:47:26

在这里,0不是一个特殊的值,它意味着它在普通算术中所做的事情。因此,没有节流将被应用在页面丢失的基础上。

这是我喜欢的vacuum_cost_page_miss设置。缺页是固有的自我限制。一旦需要页而没有找到,进程就会暂停,直到页面被读取。在等待时,该进程不会发出更多的读取请求。这与页面污染形成了鲜明对比。除了真空_成本_佩奇_脏驱动的节流之外,没有其他东西可以防止真空过程以远远快于将页面写入磁盘的速度污染页面,从而导致IO便秘,进而干扰系统中的其他所有人。

如果要将vacuum_cost_page_miss降为零,还应该将vacuum_cost_page_hit设置为零。比前者高是很奇怪的。也许是谁想出了那些设置,只是认为1已经足够低,所以没有必要改变另一个设置。

在v9.6之前,vacuum_cost_page_miss节流可能特别糟糕(当引入冻结映射时),当冻结已到达autovacuum_freeze_max_age但自上次冻结以来几乎没有变化的大型表时。PostgreSQL将对每个页面收取vacuum_cost_page_miss费用,尽管通过readahead的魔力,大多数页面已经在内核页面缓存(但不是在shared_buffers中)找到了。因此,它将缓慢地走在桌子上,就像它在做随机读取一样,同时不做任何有用的工作,并将桌子锁作为人质。这可能正是导致你的前任做出他所做的改变的原因。

的自动真空将执行大量IO,直到它达到成本限制。

自动真空一旦开始,有一个大部分固定的任务要做,并将做的IO数量,它需要做的,以使它完成。关键不在于它会做多少IO,而在于它做了多少时间。

票数 1
EN

Stack Overflow用户

发布于 2020-10-27 06:57:02

在我看来,这些设置是愚蠢的。

将共享缓冲区中的页的成本设置为高于从磁盘读取页的成本没有任何意义。另外,如果您想要降低I/O成本,为什么要在20岁的时候离开vacuum_cost_page_dirty

最后,只有当v12基于比v12更早的PostgreSQL版本时,才能解释增加成本限制并将成本延迟保持在像5这样的高值(默认情况下来自于v12 2)。

这让人觉得,不管是谁接触了自动吸尘器的设置,都有一个模糊的想法,想要让自动真空更具有攻击性,但并没有很好地理解它,没有把它做好。我认为v12的默认设置更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64548853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档