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

Postgres 11各表autovacuum(freeze)触发时机查询技术问询

Postgres 11 查看表触发自动Vacuum Freeze的时机

你要查询每张表何时达到vacuum_freeze_table_age阈值触发自动Vacuum Freeze,原语句存在两个核心问题:

  • 错误使用了relminmxid,判断Freeze触发应该基于relfrozenxid——PostgreSQL中,当表的age(relfrozenxid)达到vacuum_freeze_table_age时,会触发自动Freeze操作
  • 计算逻辑颠倒,应该用阈值减去当前已使用的XID年龄,才能得到距离触发还有多少剩余空间

修正后的查询语句

SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    age(c.relfrozenxid) AS current_freeze_age,
    current_setting('vacuum_freeze_table_age')::int8 AS freeze_threshold,
    current_setting('vacuum_freeze_table_age')::int8 - age(c.relfrozenxid) AS left_for_vacuum_freeze
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE
    c.relkind IN ('r', 'm', 't') -- 普通表、物化视图、TOAST表
    AND n.nspname NOT LIKE 'pg_temp%'
    AND n.nspname NOT IN ('pg_catalog', 'information_schema'); -- 排除系统模式

结果解读

  • current_freeze_age:表当前的冻结XID年龄
  • freeze_threshold:触发自动Freeze的阈值(由vacuum_freeze_table_age参数定义)
  • left_for_vacuum_freeze:距离触发自动Freeze剩余的XID数量,数值为正表示还有缓冲空间,为负说明已经超过阈值,建议手动执行VACUUM FREEZE处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:35:32