我的生产PostgreSQL面临一个问题,它与Wraparound问题有关,基本上是超出XID范围的限制。
此PostgreSQL生产运行超过1年,包含大量事务和批量插入。
我在谷歌搜索了很多但是对此严重错误感到困惑和非常恐慌。现在我在任何真空或自动真空吸尘器中都会出现此错误。 我有大约250 GB的Postgres生产数据库,我也为所有表设置了自动真空。
Error and Warning are:
WARNING: oldest xmin is far in the past
HINT: Close open transactions soon to avoid wraparound problems.
我还检查了当前的打开事务,但Postgres会话中没有任何长时间运行的事务。
Current database age of XID :
Database Age
"template1"; 153163876
"template0"; 153163876
"postgres"; 153163876
"dispatcher"; 153163876
"qate"; 195568300
以上结果我使用了以下查询:
SELECT datname, age(datfrozenxid) FROM pg_database;
请尽快提供您的意见,因为这很快就会给我的生产数据库带来问题。
答案 0 :(得分:3)
如果你有能力强行关闭公开交易:
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'mydb';
然后autovacuum可以冻结行,或者您可以手动运行VACUUM
。您可能必须暂时阻止新交易。以下是详细说明:
..除非你没有DROP
数据库。只需VACUUM
。
或者Postgres将强制关机以防止数据丢失。 Detailed explanation in the manual.