Postgres环绕式问题

时间:2014-11-28 06:18:09

标签: sql postgresql transactions postgresql-9.3 vacuum

我的生产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;

请尽快提供您的意见,因为这很快就会给我的生产数据库带来问题。

1 个答案:

答案 0 :(得分:3)

如果你有能力强行关闭公开交易:

SELECT pg_terminate_backend(procpid)
FROM   pg_stat_activity
WHERE  datname = 'mydb';

然后autovacuum可以冻结行,或者您可以手动运行VACUUM。您可能必须暂时阻止新交易。以下是详细说明:

..除非你没有DROP数据库。只需VACUUM

或者Postgres将强制关机以防止数据丢失。 Detailed explanation in the manual.