删除很多行后,我是否需要重新索引和抽真空表?


10

我正在运行一个PostgreSQL数据库,该数据库具有几个存储日志信息的表。此信息仅用于报告目的,如果超过30天,则将其转储到文件中并从数据库中删除。

可能有数百万行被删除,并且删除后每次都运行REINDEX。

这是否足够,还是我们还应该运行VACUUM或VACUUM ANALYZE?还是不需要REINDEX,而我们应该运行VACUUM或VACUUM ANALYZE?

我们正在使用PostgreSQL 8.2.3,我相信它不允许自动抽真空。


2
您可能要考虑分区,请参阅postgresql.org/docs/9.0/static/ddl-partitioning.html;那么您可以删除分区并避免清理。
Alex

3
版本8.2.3确实具有auto_vacuum,请参见手册,但您应尽快更新。当前的8.2版本是8.2.17。您落后了14个补丁,其中包括几个安全补丁。升级到8.4甚至9.0是一个更好的主意,auto_vacuum得到了改进。
Frank Heikens 2010年

Answers:


13

您应该执行VACUUM ANALYZE,因为VACUUM将允许重复使用已删除数据所使用的空间并防止事务回绕,并且ANALYZE将更新计划程序统计信息,这将为您的报告查询提供更好的查询计划。

从理论上讲,不需要REINDEX,但是您可能会发现,由于索引是连续的,因此可以提高性能。

8.2的相关文档页面在此处(例行重新索引)此处(例行吸尘)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.