You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 14.7中VACUUM无法回收空间问题求助

PostgreSQL Aurora 死行无法回收问题排查与解决

核心原因

AWS Aurora的只读副本会维护旧事务快照以提供一致性读,即便主库应用已关闭,副本的快照仍可能持有对旧行版本的引用,导致主库VACUUM无法清理这些死行。这是Aurora架构特有的机制,区别于普通PostgreSQL流复制。

验证方式

执行以下SQL查看副本的最旧事务ID:

SELECT oldest_xmin FROM pg_stat_replication;

对比主库当前事务ID:

SELECT txid_current();

若oldest_xmin远小于当前事务ID,说明副本持有旧快照,正是导致死行无法清理的原因。

解决步骤

  • 临时调整副本架构:若业务允许,将只读副本提升为独立实例,断开与主库的复制关系。主库此时可正常执行VACUUM清理死行,完成后再重新搭建副本或调整副本数量。
  • 检查副本同步延迟:通过AWS控制台查看只读副本的复制延迟指标,若延迟过高会导致快照无法及时更新,需排查副本性能或网络问题。
  • 尝试VACUUM FULL(谨慎使用):在业务低峰期执行VACUUM FULL staging.sd3;,该操作会直接重建表,绕过快照的行版本锁定,但会锁表且占用额外空间,需评估业务影响后操作。

原VACUUM输出

INFO: vacuuming "staging.sd3"
INFO: "seq": found 0 removable, 349255 nonremovable row versions in 31735 pages
DETAIL: 348974 dead row versions cannot be removed yet.
CPU: user: 0.75 s, system: 0.06 s, elapsed: 3.19 s.

内容的提问来源于stack exchange,提问作者user2238704

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:23