更新时间:2025-05-29 GMT+08:00
AUTOVACUUM清理效率低
问题描述
AUTOVACUUM在清理时需要大量的I/O操作。为了不影响主业务,AUTOVACUUM有一套自己的I/O管控机制,通过控制单位时间内的页面访问数量来减少AUTOVACUUM线程对业务的影响。这套I/O管控机制在大表和大容量场景下会极大地影响VACUUM的效率。
问题定位
清理效率的估算请参见如何评估VACUUM清理速率或需要清理多久。
问题规避
如果发现AUTOVACUUM清理死行过慢,跟不上业务死行生成的速度,导致死行持续堆积,则需要人工介入处理,具体策略如下:
- 调整AUTOVACUUM参数:在系统I/O资源充足的情况下,可以通过减小autovacuum_vacuum_cost_delay来加快VACUUM的清理速度。该参数默认值为20ms,即扫描约20-50个页面时会触发一次强制睡眠,每次睡眠时间为20ms。建议将该参数调整为1ms,以极大地提高后台线程的清理效率。
- 手动执行VACUUM:如果调整参数后仍无法立即回收死行,可以通过视图获取死行较多的数据表,并对这些表进行手动VACUUM。手动VACUUM不使用I/O管控,会以最大效率清理死行,从而快速减少死行数量。
父主题: 数据表膨胀可能的原因