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


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を参照してください。その後、パーティションを削除してバキュームを回避できます。
アレックス

3
バージョン8.2.3にはauto_vacuumがあります。マニュアルを参照してください。できるだけ早く更新する必要があります。現在の8.2バージョンは8.2.17です。いくつかのセキュリティパッチを含め、14個のパッチが遅れています。8.4または9.0へのアップグレードがより良いアイデアです。auto_vacuumが改善されました。
フランクハイケンス

回答:


13

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.