我有一个用例,每分钟同时在另一端插入 100 000 行,少数线程会获取这些行并将它们从我的表中删除。所以肯定会在我的表中创建很多死元组。
我的自动真空配置是
autovacuum_max_workers = 3
autovacuum_naptime = 1min
utovacuum_vacuum_scale_factor = 0.2
autovacuum_analyze_scale_factor = 0.1
autovacuum_vacuum_cost_delay = 20ms
autovacuum_vacuum_cost_limit = -1
从“pg_stat_user_tables”我可以发现自动真空正在我的表上运行,但在几个小时内我的磁盘将满(500 GB),我无法插入任何新行。
在第二次尝试时,我更改了以下配置
autovacuum_naptime = 60min
autovacuum_vacuum_cost_delay = 0
这次我的模拟和自动真空运行良好,最大磁盘大小为 180 GB。
这里我的疑问是,如果我将“autovacuum_vacuum_cost_delay”更改为零毫秒,自动真空如何释放死元组空间并 PG 重用它?如果我将值设置为 20 毫秒,为什么它不能按预期工作?