【发布时间】:2020-08-11 15:38:50
【问题描述】:
我有一个用例,每分钟同时在另一端插入 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”中,我可以发现我的表上正在运行 auto-vacuum,但在几个小时内我的磁盘将满 (500 GB),我无法插入任何新行。
在第二次尝试时,我更改了以下配置
autovacuum_naptime = 60min
autovacuum_vacuum_cost_delay = 0
这次我的模拟和自动真空运行良好,最大磁盘大小为 180 GB。
这里我的疑问是,如果我将“autovacuum_vacuum_cost_delay”更改为零毫秒,自动真空如何释放死元组空间并 PG 重用它?如果我将值设置为 20 毫秒,为什么它没有按预期工作?
【问题讨论】:
-
“每分钟缺少 1 行”是什么意思?您是否每分钟仅插入和删除 1 行?行有多大?
-
另外,如果你遇到这样的问题,那么你应该减少午睡时间,而不是增加到 60 分钟。
-
@JonathanJacobson 我认为他的意思是 10 万行,即 100,000 行。 en.wikipedia.org/wiki/Lakh
-
谢谢@jjanes - 我不知道这个词
标签: postgresql postgresql-9.6 autovacuum