前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >postgresql autovacuum 4 怎么调整参数,让autovacuum 多干活,与成本的计算

postgresql autovacuum 4 怎么调整参数,让autovacuum 多干活,与成本的计算

作者头像
AustinDatabases
发布2021-10-26 16:49:36
9320
发布2021-10-26 16:49:36
举报
文章被收录于专栏:AustinDatabases

接着上期说,在调整完几个常见的参数后,

还有如下的参数可以调整提高autovacuum 性能,转而提高你POSTGRESQL的性能

  • autovacuum_vacuum_cost_limit : total cost limit autovacuum could reach (combined by all autovacuum jobs).
  • autovacuum_vacuum_cost_delay : autovacuum will sleep for these many milliseconds when a cleanup reaching autovacuum_vacuum_cost_limit cost is done.
  • vacuum_cost_page_hit : Cost of reading a page that is already in shared buffers and doesn’t need a disk read.
  • vacuum_cost_page_miss : Cost of fetching a page that is not in shared buffers.
  • vacuum_cost_page_dirty : Cost of writing to each page when dead tuples are found in it.

在此之前,有人问,是否可以关闭 track_counts 这个参数,回答是 NO NO NO ,为什么,因为如果你敢关闭这个参数,autovacuum 就敢不工作,原因为这个参数为统计整体数据库中的表的信息,如果你关闭这个参数,后台的stats collector 进程将无法给 autovacuum 进程下一次到底应该对那些表进行真空操作,此时autovacuum 就和瞎子一样,不知道该干什么了,所以这个参数是必然被打开的,不能关闭。

首先我们要确认的一个问题是autovacuum 会对8kb的数据页进行读取来修改或写入dead tuple的信息,对于比较大的表来说这是一个消耗I/O的操作,autovacuum 工作时可能是在业务的高峰期,如何能平衡autovacuum工作中尽量减少对业务高峰期性能的影响,就需要依靠下面的的这些参数了。

1 autovacuum_vacuum_cost_limit 控制预期autovacuum 的成本,达到这个成本后,我们就停止autovacuum的工作,这个值本身与workers 的数量有关,如果你有 3个 workers 则 这个值是除以 3 也就是 3个workers 的总和加在一起,不会超过这个值,所以如果你的workers 比较多,此时这个值就的设置的大一点,来应对你的更多的workers ,默认这个值是200

2 autovacuum_vacuum_cost_delay 在达成本后,autovacuum不工作需要等待多长时间然后再次工作。

当对于一个busy的系统,

1 添加 workers 可以从默认的 3个 变为 6个或更多

2 调整 autovacuum_vacuum_cost_limit , 以3个为200 的默认值当6配置为 6个workers 的时候可以调整参数为 400

3 调整 autovacuum_vacuum_cost_delay 的值从20ms 变为 15-10 ms 减少delay 的时间。

以上就是针对这几个参数的优化建议。当然如果数据库中的表的分布情况比较复杂,则autovacuum_vacuum_cost_limit 和 autovacuum_vacuum_cost_delay 这两个参数还是可以针对单表来进行调整的。

小结,调大workers的工作数量后,如果不调整 autovacuum_vacuum_cost_limit 的情况下,只能让你的autovacuum更慢。这就如同需要搭载汽车的人数增多,那么我们调高 works 相当于增加运输人的车辆数,但车辆数增加了,可道路没有拓宽,还是羊肠小道,那么车辆可能会拥塞到路上,所以增加车辆的同时还需要拓宽道路。

vacuum_cost_delay = 0

vacuum_cost_page_hit = 1

vacuum_cost_page_miss = 10

vacuum_cost_page_dirty = 20

vacuum_cost_limit = 200

上面的几个参数与vacuum 的成本计算有关, 这里

vacuum_cost_page_hit

vacuum_cost_page_miss

vacuum_cost_page_dirty

三个参数的的功能就是计算 vacuum 的成本,

vacuum_cost_page_hit 主要的是标准从share buffer中找到数据的成本

这里默认是 1

vacuum_cost_page_miss 这个参数主要标注的是在share buffer 中找不到数据的情况下,需要从磁盘读取数据的成本 这里默认是 10

vacuum_cost_page_dirty 最后这个参数要标注的是在share buffer 中无法找到数据,并且 share buffer 中无法在装入,需要将脏页刷到磁盘,在将磁盘的信息读入到share buffer 中的成本

可以从上图看到每一个值都有自己的默认的成本,接着上面的说,上面提到 vacuum 的成本是200 ,现在知道这个成本是怎么计算来的了吧。

那么调整autovacuum 加速他进行整理的方式主要有3个方法

1 调整大 autovacuum_vacuum_cost_limit 的值,这样真空触发cost 停止的次数就会大大减少

2 调整上面的三个参数,降低他们的值,也就变相提高了 autovacuum_vacuum_cost_limit

3 提高autovacuum 的 mem ,有效降低出现 autovacuum_vacuum_cost_limit 和 autovacuum_vacuum_cost_limit的情况。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档