问题描述
我有一个关于 Postgres 自动真空/真空设置的问题。 我有一个包含 45 亿行的表,有一段时间进行了大量更新,导致大约 15 亿个死元组。此时 autovacuum 需要很长时间(几天)才能完成。 在查看 pg_stat_progress_vacuum 视图时,我注意到:
max_dead_tuples = 178956970
导致多次索引重新扫描(index_vacuum_count)
根据 docs - max_dead_tuples 是我们可以在需要执行索引真空循环之前存储的死元组数量,基于维护工作内存。
根据 this,一个死元组需要 6 个字节的空间。
所以 6B x 178956970 = ~1GB
但我的设置是
maintenance_work_mem = 20GB
autovacuum_work_mem = -1
那我错过了什么?为什么我的 1.5b 死元组不能全部放入 max_dead_tuples,因为 20GB 应该提供足够的空间,为什么需要多次运行?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)