我们在我们的应用程序中使用 Postgresql 9.4,并且某些表的死元组没有被正确删除。我们使用默认配置开启了 autovacuum。以下是一些日志(这会持续一整天):
< 2021-11-30 00:31:30.703 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2106528 remain, 1133145 are dead but not yet removable
buffer usage: 62922 hits, 103385 misses, 172 dirtied
avg read rate: 2.413 MB/s, avg write rate: 0.004 MB/s
system usage: CPU 1.24s/0.82u sec elapsed 334.71 sec
< 2021-11-30 00:48:10.794 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2107145 remain, 1133466 are dead but not yet removable
buffer usage: 62876 hits, 103433 misses, 75 dirtied
avg read rate: 2.998 MB/s, avg write rate: 0.002 MB/s
system usage: CPU 1.15s/0.73u sec elapsed 269.55 sec
< 2021-11-30 00:58:27.625 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2107347 remain, 1133476 are dead but not yet removable
buffer usage: 62876 hits, 103433 misses, 14 dirtied
avg read rate: 2.419 MB/s, avg write rate: 0.000 MB/s
system usage: CPU 1.18s/0.85u sec elapsed 333.99 sec
< 2021-11-30 01:39:59.626 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2107627 remain, 1133724 are dead but not yet removable
buffer usage: 62857 hits, 103454 misses, 44 dirtied
avg read rate: 2.446 MB/s, avg write rate: 0.001 MB/s
system usage: CPU 1.28s/0.83u sec elapsed 330.44 sec
< 2021-11-30 01:52:16.303 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2107741 remain, 1133724 are dead but not yet removable
buffer usage: 62878 hits, 103431 misses, 3 dirtied
avg read rate: 2.426 MB/s, avg write rate: 0.000 MB/s
system usage: CPU 0.75s/0.78u sec elapsed 333.01 sec
< 2021-11-30 02:33:24.258 EST >LOG: automatic vacuum of table "erp.public.example_table": index scans: 0
pages: 0 removed, 71343 remain
tuples: 0 removed, 2107731 remain, 1133919 are dead but not yet removable
buffer usage: 62880 hits, 103447 misses, 32 dirtied
avg read rate: 3.414 MB/s, avg write rate: 0.001 MB/s
system usage: CPU 1.09s/0.71u sec elapsed 236.70 sec
如您所见,vacuum 至少需要 200 秒并且没有删除任何元组。这也发生在其他表上。已经检查常见原因:
- 长时间运行的事务
- 未提交的准备好的事务。
- 过时的复制槽。
但这些都不适用于我们的案例