web-dev-qa-db-ja.com

VACUUM FULLにはANALYZEが必要ですか

PostgreSQL 9.3内のVACUUM機能の洞察に感謝します。私はドキュメントを読み、少し調べましたが、これに対する明確な答えは見つかりませんでした。

9.3サーバー用に毎週のDBメンテナンスジョブを設定しています。

これの一部はVACUUM FULL。それは小さめのDBであり、週末のメンテナンス期間が適切であるため、FULLを問題なく実行できます。

コマンドにANALYZEオプションを追加する意味はありますか?

9.3のドキュメントによると:

VACUUM FULLは、テーブルの内容全体を余分なスペースのない新しいディスクファイルに書き換え、未使用のスペースをオペレーティングシステムに返すことができるようにします。

テーブルが完全に再作成された場合、ANALYZEが発生するように特別に要求する必要がありますか、または行がテーブルの新しいバージョンに書き込まれるときに統計が自動的に更新されますか?

8
Eoin O'Hehir

統計は、列の値から生成されます。これらの値はVACUUM FULLまたはVACUUMによっても変更されないため、新しいANALYZE特に必要ありませんです。

ただし、データベースがメンテナンスウィンドウにある場合は、データベースを実行する良い機会です。その実行時間は、VACUUM FULLと比較して取るに足らない可能性があります。

デフォルトでは、DBAはこれを手動で行うのではなく、autovacuum/auto-analyzeに依存します。ただし、バルクロードまたは大幅に変更されたばかりの新しいテーブルが、適切なクエリにすぐに関与する場合は、手動のANALYZEを除きます。良い統計なしに計画を立てることはできません。

5
Daniel Vérité