postgres 真空

Ben*_*y B 2 postgresql opennms vacuum

好的,我已经搬到一家新公司,我看到他们在这里有一个 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".
Run Code Online (Sandbox Code Playgroud)

它实际上从 100 万开始,而我已经下降到 965500,如您所见。我已经通过登录单用户 ( postgres -D) 并完全运行 Vacuum来达到这一点。现在我希望这可以清理它,但结果正好是 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".
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 5

我以前遇到过这个问题。以下是我如何修复它的笔记

您需要通过运行真空来解决问题,因为错误很方便地暗示了这一点。为此,首先关闭 postgres sudo /sbin/service postgresql stop

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

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

您将收到如下提示:

PostgreSQL 独立后端 8.1.18

后端>

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

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

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

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