我有一张在 Postgres 9.1 下增长的表。这是一个包含大量插入和删除操作的高吞吐量表,但就数量或记录而言,它通常应保持在 1-2k 之间。自动吸尘已启用,我们已运行手动吸尘。我们已经检查过锁,但似乎没有。运行“真空详细”;说虽然有数百万条死记录,但“发现 0 个可移动”。
我可能没有想到什么?
小智 8
运行此查询:
SELECT * FROM pg_stat_activity ORDER BY xact_start NULLS LAST LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
如果您返回 xact_start 不为空的行并且它的时间超过几秒钟,那么这就是您的罪魁祸首。VACUUM 无法删除 transaction_ids 大于或等于系统中最早打开的事务的行(即使它位于完全不同的数据库中)。如果您终止该事务并重新运行 VACUUM,您应该看到多于 0 行可移动。