我管理一个大型(数百个演出)数据库,其中包含具有各种角色的表,其中一些包含数百万条记录。一些表只接收大量插入和删除,其他一些插入和大量更新。
数据库在 Debian 6.0 amd64 系统上的 PostgreSQL 8.4 上运行,具有 16 GB 的 RAM。
问题有时是桌子上的 autovacuum 过程,需要很长时间(几天)才能完成。我希望能够粗略地判断一个特定的vacuum 命令需要多长时间,以便能够决定是否取消它。此外,如果有 postgres 真空操作的进度指示器,那将非常有帮助。
编辑:
我不是在寻找防弹解决方案。对死元组的数量或必要的 I/O 字节数的粗略提示就足以决定。不知道什么时候VACUUM结束真的很烦人,无论如何。
我已经看到pg_catalog.pg_stat_all_tables有一个列表示死元组的数量。所以有可能有一个估计,即使这意味着一个人必须ANALYZE在之前的桌子上。在另一方面,autovacuum_vacuum_threshold与autovacuum_vacuum_scale_factor设置单独证明Postgres的本身知道一些有关变化对表的数量,并可能将其放在了DBA手中了。
我不确定要运行什么查询,因为当我运行时VACUUM VERBOSE,我看到不仅表,而且它们的索引也在被处理。