web-dev-qa-db-ja.com

自動バキュームVACUUMは手動バキュームよりも遅いですか?

自動バキュームにを要する大きなテーブルがいくつかあり、バキュームが完了するまでパフォーマンスが低下することがあります。私が見たほとんどの推奨事項は、自動バキュームVACUUMsが行う作業が少なくなるように、勤務時間外に手動でVACUUMを行うことについて言及していますが、自動バキュームが完了するまでに数日かかる場合、手動でVACUUMを絞る(24時間のピークアクティビティサイクルを想定)

マニュアルVACUUMが完了するまで数日かかると思いますか?それとも私の仮定は間違っていますか?


関連: 自動バキュームの異なる「タイプ」には異なるパフォーマンス特性がありますか?

3
mgalgs

「ソート」。

自動VACUUMは手動バキュームよりも低い強度で実行される可能性があるため、各バッチ間でより長く停止します。 autovacuum_vacuum_cost_delayvacuum_cost_delayとは異なる設定にすることができます。デフォルトでは、手動バキュームの遅延はなく、自動バキュームのみです。

Autovacuumはまた、並行クエリのブロックを回避するためにより強力に機能し、別のクエリがバキュームと競合するロックを取得しようとすると、その作業を中止します。真空フェーズによっては、実際にはそれほど遅くならない場合や、かなりの作業が破棄される場合があります。最初のフェーズのヒープスイープでデッドタプルをマークし、可視性マップを設定しても、途中で打ち切られても、その後のバキュームで一部の読み取りが繰り返される可能性がありますが、それほど問題になりません。インデックスを更新する場合ははるかにコストがかかりますが、バキュームがキャンセルされた場合に失われる作業量を減らすためにバッチで行われます。

関連するパラメータ、特にautovacuum_vacuum_cost_delayについては autovacuum configuration を参照してください。これは 手動バキュームで使用されるvacuum_cost_delay設定 とは異なることに注意してください。

4
Craig Ringer