PostgreSQL 19 autovacuum有什么变化?并行清理和表评分说明
大表维护占用很久、其他表又排着队,说明维护速度或调度可能跟不上数据增长。19既增加部分索引处理的并行能力,也用评分决定哪些表更需要优先维护。
一个改进负责怎样分担单次任务,另一个负责怎样排先后。它们不会让所有维护步骤自动并行,更无法替满负荷的磁盘增加实际速度。
一、autovacuum 平时到底在忙什么?
记录被更新或删除后,旧版本要等不再被事务使用,才能清理并重复利用空间。autovacuum会自动安排这些清理工作,也负责相关统计信息更新。
它还承担事务 ID 等维护工作。即使一张表平时不怎么改动,也不能因此永远不清理。不要为了避免后台 I/O,长期关闭它。
二、“并行”主要指索引处理,不是整张表一起扫
19 的并行 autovacuum,重点是索引 vacuum 和索引 cleanup 阶段。可以理解成:一个负责这张表的维护进程,再请额外的工作进程分担符合条件的索引任务。
它与“同时维护多张表”的 autovacuum_max_workers 不是同一个开关。前者关心一张表的索引任务能否多人分担,后者关心能有多少个普通 autovacuum 进程同时工作。
并行效果还取决于索引数量、大小和类型。如果主要耗时在表扫描,或者只有一个适合处理的索引,增加并行工作进程也未必有明显收益。
三、升级后会自动用上吗?
新增参数 autovacuum_max_parallel_workers 默认是 0,也就是默认不启用这一并行能力。先查当前配置:
这里不仅有单个 autovacuum 的限制,还有实例可用工作进程的总量。查询、维护等任务可能争用资源,填了某个数字,不代表每次都能分到那么多进程。
不要把“CPU 有 16 核”直接换算成“并行数设 16”。先选一张有多个大索引、维护确实很慢的表测试,观察清理时长和业务延迟,再逐步扩大。
四、评分系统怎样决定先清理谁?
以前的表处理顺序不够贴近实际紧迫程度。19 会综合几个方向看一张表:事务 ID 有多老、旧行积累到了什么程度、插入是否达到维护要求,以及统计信息是否需要更新。
每个方向都有一项分数,表的优先级取其中最高的一项,而不是简单地把所有数字加起来。这样,某一项已经很紧迫的表,就更容易被优先处理。
选择数据库和选择库内的表,仍然是两个步骤;评分系统主要用于库内的表排序。它也不会因为某张表分高,就马上打断所有正在运行的工作。
两个视图分别用于查看表评分与正在执行的清理。监控程序应按19的字段结构适配,不能直接假设它们与旧版本相同。
五、大表维护应该怎样调整?
先积累一段时间的日志,再判断是触发太少、执行太久,还是经常被其他操作打断。原因弄清后再调整对应参数。
| 现象 | 优先检查 |
|---|---|
| 旧行持续增多,却很久不启动 | 触发阈值、表级设置、工作进程是否占满 |
| 索引处理阶段很长 | 是否适合开启小范围并行,资源是否有余量 |
| 清理运行过,旧行仍清不掉 | 长事务、复制槽等是否阻止回收 |
| 维护一开始,业务就明显变慢 | 磁盘和 CPU 压力,清理限速是否需要调整 |
长事务挡住清理时,评分不会替你消除障碍;磁盘已满负荷时,多开进程也不一定更快。先找真实瓶颈,每次小范围改动,效果才容易判断。
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏