前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgresql autovacuum 6 为什么大表不进行autovacuum 的原因 (非事务,复制槽原因)

Postgresql autovacuum 6 为什么大表不进行autovacuum 的原因 (非事务,复制槽原因)

作者头像
AustinDatabases
发布2021-11-10 15:23:24
8460
发布2021-11-10 15:23:24
举报
文章被收录于专栏:AustinDatabases

的确是,最近一直在研究和写autovacuum的事情,但造化弄人,阴沟翻船的事情也是不少预见了,这次就遇到了。(让你前5篇嘚瑟)

先简化的说一下事情,因为要调整参数,找到怎么快速激发autovacuum工作的方法,在参数的调试中,掉入了黑洞。

1 环境:PG 11.7 CPU 2 core 内存 16G 磁盘普通SATA

2 参数配置 SB 4G autovacuum_mem 1G maintanence_work_mem 1G

3 通过pgbench 灌入大表数据

对数据库产生数据压力,80客户端 每个客户端10个进程 不间断的进行DML操作

通过系统表可以看到,这里的测试表的小表的 autovacuum 很快就进行清理了。

下面系统表展示了表的活的tuple , 死的tuple 以及 死的tuple 占整体的总行的百分比。最后面是autovacuum 最后一次的时间。

下图可以看到只有1 亿的大表的 autovacuum last 的时间没有动,和其他表相比,上一次autovacuum 的时间在 7 个小时前。

基本上每秒死行在这个表上增加 200行左右。

根据前几篇写的,有的同学可能会提到,调整的参数

autovacuum_vacuum_threshold 和 autovacuum_vacuum_scale_factor 这两个参数,可以看到已经调整过了,实际上针对大表应该单独进行调整,这里就偷懒了。具体如何进行单表调整,看第三篇即可。

但是调整成这样系统大表 pgbench_accounts 还是没有进行 autovacuum

随即苦恼了一天,继续测试找问题,

此时估计有同学会提出,三个应该 autovacuum 的工作的原因

1 长事务影响,导致 autovacuum 不能进行工作

2 有复制槽影响,并且复制停止了,导致autovacuum 不能工作

3 因为autovacuum 的cost 过大导致不能进行 autovacuum的工作

这里可以排除以上三个原因,这边没有长事务,单机,并且相关的 cost 已经调整(具体 cost调整 看第四篇)

所以autovacuum 不工作,或者无法更好的工作的原因还有其他的,并且网上我没有找到描述这方面的原因。

原因 1 autovacuum 对大表操作时间过长,通过观察系统中的活动的进程,可以发现实际上autovacuum 在工作中,只是工作的时间较长。

其他的表本身在进行autovacuum 很快就完成了工作。

所以第一个原因并不是autovacuum没有工作,而是工作的时间太长。

从另一个角度可以证明,对于大表的参数应该是单独调整,不应该在整体的参数进行配置, 对于大表的autovacuum 应该控制频度。频度太低和太高都对大表的vacuum操作无益处。

原因2 众所周知,在autovacuum 操作中,会带有两个操作 1 vacuum 2 analyze, 在autovacuum 操作完毕后,需要进行 analyze 的操作, 而大表的vacuum analyze 也不是很快的,所以有些时间 autovacuum 不操作的原因也有 analyze的因素,长时间无法完成 analyze ,自然会影响 autovacuum的 真空操作。

所以以上两个原因都是针对大表的很长时间没有进行autovacuum操作的奇葩原因。

遇到上面的问题主要要考虑

1 是否需要对表进行分区处理,单表无法进行并发的autovacuum 的操作,将表分区可以提高针对表的vacuum 的速度

2 存储大表的数据磁盘,替换为SSD 磁盘

3 通过降低autovacuum_analyze_scale_factor 参数的,减少对大表的 analyze时时间过长,阻碍 autovacuum vacuum 。

4 定期晚上进行手动的 vacuum 对于大表 ,在手动vacuum 时会autovacuum针对这个表的操作会停止。

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

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

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

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

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