模拟数据库事务号用尽,可参考 https://www.modb.pro/db/31736
数据库的年轮值
age(datfrozenxid) 的值越高,说明这个数据库长时间未进行freeze回收事务操作。
select datname,datfrozenxid,age(datfrozenxid) from pg_database order by age(datfrozenxid) desc; -- datfrozenxid: 在此之前的所有事务ID在数据库中已经被替换为一个永久的(“冻结的”) 事务ID, 它是此数据库中所有表的pg_class.relfrozenxid值的最小值。
复制
数据库下表的年轮值
age(relfrozenxid) 的值越高,说明这个表长时间未进行freeze回收事务操作。
select (u.schemaname||'.'||u.relname) as tablename,relfrozenxid,age(relfrozenxid) from pg_class c,pg_stat_user_tables u where c.oid=u.relid order by age(relfrozenxid) desc; -- relfrozenxid: 在此之前的所有事务ID在表中已经被替换为一个永久的(“冻结的”) 事务ID
复制
数据库对象的年轮值
--所有对象的年轮值 select nspname,relname,relkind,relfrozenxid,age(relfrozenxid) from pg_class,pg_namespace where pg_namespace.oid=relnamespace and relfrozenxid !=0 and nspname not in('pg_catalog','information_schema') order by 5 desc; --展示剩余age select current_database(),rolname,nspname,relkind,relname,age(relfrozenxid),2^31-age(relfrozenxid) age_remain from pg_authid t1 join pg_class t2 on t1.oid=t2.relowner join pg_namespace t3 on t2.relnamespace=t3.oid where t2.relkind in ('t','r','p') order by age(relfrozenxid) desc limit 6; --直接生成vacuum 语句 select ('vacuum freeze '||((case when b.inhparent is not null then b.inhparent else a.oid end)::regclass)::varchar||';') table_name, max(age) age from (select c.oid,greatest(age(c.relfrozenxid),age(t.relfrozenxid)) age FROM pg_class c LEFT JOIN pg_class t ON c.reltoastrelid = t.oid WHERE c.relkind IN ('r', 'm','p') and c.oid not in (select inhparent from pg_inherits) and c.reltuples!=0) a left join pg_inherits b on a.oid=b.inhrelid group by (case when b.inhparent is not null then b.inhparent else a.oid end) order by max(age) desc limit 10;
复制
表中某一行数据的年轮值
select xmin,age(xmin),* from table_name order by age(xmin) desc;
复制
freeze 失败的报错
uncommitted xmin %u from before xid cutoff %u needs to be frozen
这个报错可以通过手工执行vacuum freeze复现,原因可能是数据损坏,也可能是有数据库bug
处理
方法1:建议用最新的数据库版本,
方法2:将有问题的数据库pg_dump出来重建新的数据库,并将原数据库删除
方法3:找到有问题的数据,并将数据重写
方法4:用德哥的方法跳过 https://www.modb.pro/db/91545
最后修改时间:2021-11-25 11:41:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
沉住气,慢慢来,先做好当下最重要的事情。
10月前

评论
相关阅读
玩一玩系列——玩玩pg_mooncake(PostgreSQL的高性能列存新贵)
小满未满、
552次阅读
2025-03-03 17:18:03
王炸!OGG 23ai 终于支持从PostgreSQL备库抽取数据了
曹海峰
401次阅读
2025-03-09 12:54:06
玩一玩系列——玩玩login_hook(一款即将停止维护的PostgreSQL登录插件)
小满未满、
375次阅读
2025-03-08 18:19:28
明明想执行的SQL是DELETE、UPDATE,但为什么看到的是SELECT(FDW的实现原理解析)
小满未满、
352次阅读
2025-03-19 23:11:26
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
304次阅读
2025-03-20 09:50:36
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
198次阅读
2025-03-20 15:31:04
套壳论
梧桐
188次阅读
2025-03-09 10:58:17
命名不规范,事后泪两行
xiongcc
178次阅读
2025-03-13 14:26:08
PG vs MySQL 执行计划解读的异同点
进击的CJR
122次阅读
2025-03-21 10:50:08
版本发布| IvorySQL 4.4 发布
IvorySQL开源数据库社区
115次阅读
2025-03-13 09:52:33