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