web-dev-qa-db-ja.com

大量の行を削除した後、テーブルのREINDEXとVACUUMを行う必要がありますか?

ログ情報を格納するいくつかのテーブルを持つPostgreSQLデータベースを実行しています。この情報はレポートのみを目的としており、30日以上経過するとファイルにダンプされ、データベースから削除されます。

何百万行も削除される可能性があり、削除後は毎回REINDEXを実行しています。

これで十分ですか、それともVACUUMまたはVACUUM ANALYZEも実行する必要がありますか?またはREINDEXは必要ありませんが、代わりにjust VACUUMまたはVACUUM ANALYZEを実行する必要がありますか?

私たちはPostgreSQL 8.2.3を使用していますが、自動バキュームは許可されていません。

10
cowgod

VACUUMは削除されたデータが使用するスペースを再利用できるようにし、トランザクションのラップアラウンドを防止するため、VACUUM ANALYZEを実行する必要があります。ANALYZEはプランナ統計を更新し、レポートクエリのクエリプランを改善します。

REINDEXは理論的には必要ありませんが、インデックスが連続しているため、パフォーマンスが向上する場合があります。

8.2の関連ドキュメントページは ここ(ルーチンの再インデックス) および ここ(ルーチンのバキューム) です。

13
hmallett