背景

由于PG的事务数量是有上限的,新老事务之间的年龄超过最大值之后必须要冻结,所以要及时监控,及时处理

查看数据库年龄

监控数据库年龄,及时清理

select datname,age(datfrozenxid) from pg_database order by 2 desc;

在这里插入图片描述

自动处理机制

同一个数据库中,存在的最旧和最新两个事务之间的年龄最多是2^31,即20亿,当表的年龄大于autovacuum_freeze_max_age时(默认是2亿),autovacuum进程会自动对表进行freeze。
在这里插入图片描述

查看表的年龄

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$$) order by age(relfrozenxid) desc limit 5

在这里插入图片描述

手动清理方式

1、vacuum freeze table_name
2、pg_squeeze

Logo

一站式 AI 云服务平台

更多推荐