【发布时间】:2009-09-14 16:05:47
【问题描述】:
我想从 PHP 中清理一个 PostgreSQL 数据库。
我试过这个:
pg_query($conn,"vacuum analyse;");
如何判断这是否有效?
【问题讨论】:
标签: php postgresql vacuum
我想从 PHP 中清理一个 PostgreSQL 数据库。
我试过这个:
pg_query($conn,"vacuum analyse;");
如何判断这是否有效?
【问题讨论】:
标签: php postgresql vacuum
第一个问题:你为什么要做 VACUUM FULL?这没有意义。它实际上应该永远不会被调用。
第二:从 php(可能是网页)运行 Vacuum 可能会出现问题。 Vacuum 很容易花费超过 3 分钟,这是(如果我没记错的话)网络请求的标准超时时间。
最好的解决方案是使用 autovacuum。如果您不能使用 autovacuum - 使用 cron 安排 Vacuumdb 调用。
【讨论】:
在运行 Vacuum 查询之前和之后运行此查询。如果真空之后的“年龄”比之前少,那么真空已经成功运行。
SELECT age(datfrozenxid) as age FROM pg_database where datname='your_db';
【讨论】:
假设您的 Vacuum 运行时间超过几秒钟,您可以在 postgres 客户端中运行“SELECT * FROM pg_stat_activity”以获取当前正在运行的查询的列表。您的 VACUUM 查询应显示在此处。
【讨论】:
我相信它不会返回错误,它可能正在工作。以下是有关 Vacuum 的文档。
http://www.postgresql.org/docs/current/interactive/sql-vacuum.html
【讨论】: