我正在运行一个 PostgreSQL 数据库,它有多个用于存储日志信息的表。这些信息仅用于报告目的,如果超过 30 天,则会被转储到文件中并从数据库中删除。
可能会删除数百万行,并且每次删除后我们都会运行 REINDEX。
这是否足够,还是我们还应该运行 VACUUM 或 VACUUM ANALYZE?或者 REINDEX 没有必要,我们应该只是运行 VACUUM 或 VACUUM ANALYZE?
我们正在使用 PostgreSQL 8.2.3,我认为它不允许自动清理。
答案1
您应该执行 VACUUM ANALYZE,因为 VACUUM 将允许重新使用已删除数据所使用的空间并防止事务环绕,而 ANALYZE 将更新计划器统计信息,这将为您的报告查询提供更好的查询计划。
理论上不需要 REINDEX,但您可能会发现,由于索引是连续的,因此它可以带来更好的性能。
8.2 的相关文档页面是此处(常规重新索引)和这里(例行吸尘)。