postgresql n_dead_blog与VACUUM FULL之前相同

oaxa6hgo  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(87)

今天我注意到保存操作到一个表是如此缓慢。我运行了查询select n_live_tup, n_dead_tup, relname from pg_stat_all_tables,发现我的表有3336个n_live_tup和46508837个n_dead_tup。我想这是因为几乎每分钟都有UPSERT操作。我试着在这个表上运行VACUUM FULL(在我停止这个表的所有操作之前),但是n_dead_tup仍然是一样的。VACUUM FULL花了大约1分钟,成功完成。但是为什么n_dead_tup和表的大小仍然相同呢?

lmvvr0a8

lmvvr0a81#

您可以找到VACUUM无法清理this article中的死元组的可能原因。VACUUM (FULL)也是如此,尽管它的操作方式不同。
1.有一个长时间运行的事务,它要么有一个事务ID(它修改了一些东西),要么在REPEATABLE READSERIALIZABLE隔离级别上运行。请注意,这些事务将阻止VACUUM (FULL)删除死元组 *,即使它们根本没有触及表 *。
1.可能存在过时的复制插槽。检查pg_replication_slots是否有未激活的插槽。
1.可能存在孤立的准备好的事务;检查pg_prepared_xacts
1.可能有一个带有not_standby_feedback = on的备用服务器正在运行一个很长的查询,或者有一个很旧的REPEATABLE READ事务。

相关问题