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

Amazon RDS PostgreSQL 13.7系统表大量膨胀无法清理求助

系统表死元组无法清理的排查步骤

针对Amazon RDS PostgreSQL 13.7中系统表死元组无法被VACUUM清理的问题,结合你已排查的内容,可按以下步骤进一步定位根源:

  • 检查未终止的预备事务
    预备事务即使客户端断开,也会长期持有事务ID(xmin)阻止清理。执行以下查询:

    SELECT gid, prepared, transaction FROM pg_prepared_xacts;
    

    如果返回结果,说明存在未提交/回滚的预备事务,需执行COMMIT PREPARED 'gid值';或ROLLBACK PREPARED 'gid值';清理。

  • 验证复制相关的事务持有情况
    虽然你已确认复制槽xmin为null,但需进一步检查复制状态和槽的细节:

    1. 查看复制槽的完整信息:
      SELECT slot_name, plugin, xmin, restart_lsn, active FROM pg_replication_slots;
      
      关注restart_lsn对应的LSN是否严重滞后,或active为f但未清理的槽。
    2. 检查只读副本的复制进度:
      SELECT usename, client_addr, state, replay_lsn, sent_lsn FROM pg_stat_replication;
      
      若存在replay_lsn远落后于sent_lsn的副本,可能间接导致旧事务ID无法回收。
  • 排查僵死会话或异常临时表持有者
    大量pg_temp_*表可能来自异常断开的会话,这类会话可能残留未清理的事务上下文:

    1. 查看所有会话的事务状态和xmin:
      SELECT pid, usename, datname, state, xact_start, 
             txid_snapshot_xmin(pg_current_snapshot()) AS session_xmin
      FROM pg_stat_activity;
      
      寻找session_xmin接近37231295的进程,这类进程可能持有旧事务ID。
    2. 检查临时表关联的进程:
      SELECT pid, relname FROM pg_stat_user_tables WHERE relname LIKE 'pg_temp%';
      
      若找到对应进程,可通过SELECT pg_terminate_backend(pid);终止僵死会话(注意生产环境风险)。
  • 确认旧事务的状态
    直接查询问题xmin(37231295)的事务状态:

    SELECT txid_status(37231295);
    
    • 返回'in progress':事务仍在运行,需定位对应进程并处理;
    • 返回'committed'/'aborted':事务已结束,但可能因冻结问题无法清理。
  • 检查系统表的冻结状态
    系统表的冻结年龄过高也会导致死元组无法清理:

    SELECT relname, relfrozenxid, age(relfrozenxid) AS freeze_age
    FROM pg_class 
    WHERE relname IN ('pg_attribute', 'pg_statistic', 'pg_depend');
    

    若relfrozenxid <= 37231295,需执行VACUUM FREEZE pg_catalog.pg_statistic;(需RDS超级权限),同时检查自动冻结相关配置:

    SELECT name, setting FROM pg_settings WHERE name LIKE '%freeze%';
    
  • 排查系统表死元组的产生源头
    系统表大量死元组通常来自高频对象变更操作,执行以下查询定位:

    SELECT query, calls FROM pg_stat_statements 
    WHERE query LIKE '%CREATE TABLE%' OR query LIKE '%DROP TABLE%' OR query LIKE '%ALTER TABLE%'
    ORDER BY calls DESC;
    

    若存在频繁创建/删除临时表、修改表结构的操作,需优化这类操作的频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:15:38