postgres 真空

postgres 真空

好的伙计们,我已经搬到了一家新公司,我发现他们这里有一个 PostgreSQL 数据库来运行 OpenNMS。

我是一个 MySQL 用户,对 PostgreSQL 完全不熟悉,但我至少学会了如何运行psqlpostgres -D进入单用户模式。

无论如何,OpenNMS 崩溃了。我进入系统并追踪到 PostgreSQL,结果给出了以下错误:

WARNING:  database "template1" must be vacuumed within 965550 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

实际上,它从 100 万开始,现在降到了 965500,如您所见。我通过登录单个用户 ( postgres -D) 并运行 Vacuum full 到达了这一点。现在我期望这能清理它,但结果恰好是 55 行:

WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

所以我的问题是,我是否只需要继续运行它直到达到 0 或者我做错了?

答案1

我以前也遇到过这个问题。下面是我修复它的过程的笔记。

您需要通过运行 vacuum 来解决问题,因为错误提示很方便。为此,首先,关闭 postgres sudo /sbin/service postgresql stop

现在,您需要检查每个数据库并使用独立后端执行清理。以 postgres 用户身份运行: postgres -D /opt/pgsql/data/ postgres

其中/opt/pgsql/data是postgres的数据目录的路径,postgres是要修复的数据库的名称。

您将收到如下提示:

PostgreSQL 独立后端 8.1.18

后端>

VACUUM只需在后端>提示符下输入即可。

您现在很可能会收到类似的警告:必须在 999407 个事务内清理数据库“template1”,提示:为避免数据库关闭,请在“template1”中执行全数据库 VACUUM。

只需重复这些步骤,每次更改 DBNAME,直到不再收到警告。发生这种情况时,您可以重新启动 postgres,一切将再次正确。

编辑:我还应该提到,在我们执行了几次这个过程之后;我们决定实施自动清理过程:http://www.postgresql.org/docs/8.1/static/maintenance.html#AUTOVACUUM

相关内容