年龄回收类问题 本页介绍天翼云TeleDB数据库年龄回收类问题。 事务回卷问题 问题描述 当事务未能正常回收持续一段时间,库年龄达到上限后。 报错如下,此时数据库还可以访问,但不允许写入: ERROR: database is not accepting commands to avoid wraparound data loss in database "xxx" HINT: Stop the postmaster and vacuum that database in singleuser mode 可能影响 如果CN主节点年龄回卷,那么这个CN主节点会变成只读状态; 如果某个DN主节点年龄回卷,那么写入到这个DN主节点数据SQL会报错。 解决步骤 1. 执行SQL,检查引起年龄回收问题的库: > SELECT datname, age(datfrozenxid) FROM pgdatabase where age(datfrozenxid)>200000000; 2. 连接年龄回卷的库,执行SQL,检查引起年龄回收问题的表; SELECT pgnamespace.nspname as schemaname,relname, age(relfrozenxid) as xidage, pgsizepretty(pgtablesize(pgclass.oid)) as tablesize FROM pgclass,pgnamespace WHERE pgnamespace.oidpgclass.relnamespace and age(relfrozenxid)>200000000 and relfrozenxid ! 0 order by age(relfrozenxid) desc; 3. 控制台停止该节点; 4. 手动启动节点(指定报错提示中的数据库)进入单用户模式 > postgres single D ./ xxx(database) 5. 手动执行vacuum或vacuum full回收问题表,如遇到报错,需要先解决相应报错; 6. ctrl+d退出单用户模式,控制台启动该节点。 年龄回收冲突问题 问题描述 年龄回收时,报冲突错误,如: ERROR: tuple cannot be frozen now, please try later xid 802439820 cutoff xid 958123080 committs 25144982436271 RecentDataTs 25144852436271 RecentGlobalXmin 1058123080 RecentGlobalDataXmin 1058123080k