0

我的生产 PostgreSQL 面临一个问题,这与环绕问题有关,主要是因为 XID 范围超出限制。

这个 PostgreSQL 生产运行了 1 年多,有大量的事务和批量插入。

我在谷歌搜索了很多,但对这个严重错误感到困惑和害怕。现在我在任何吸尘或自动吸尘过程中都会遇到这个错误。我有大约 250 GB 的 Postgres 生产数据库,并且我还为所有表设置了 auto-vacuum。

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;

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

4

1 回答 1

4

如果您有能力强制关闭未结交易:

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

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

..除非你没有DROP分贝。只是VACUUM它。

否则 Postgres 将强制关闭以防止数据丢失。手册中有详细解释。

于 2014-11-28T06:58:49.080 回答