Postgresは、autovacuumを使用して死んだタプルを削除することを推奨しています。しかし、自動バキュームを実行すると、同じテーブルへの他のクエリが遅くなるのでしょうか?パフォーマンスに影響するロック(行またはテーブルレベル)を追加しますか? CPUに大きな負荷がかかりますか、それとも大量のメモリを消費しますか?.
これは、書き込みと削除の量が非常に多いテーブルの1つで自動バキュームをオンにする必要があるかどうか、またはオフピーク時間に定期的に手動バキュームを実行する必要があるかどうかを判断するのに役立ちます。
メモリ使用量はautovacuum_work_mem
またはmaintenance_work_mem
によって制限されます。それはIO消費はautovacuum_vacuum_cost_delay
および友人によって制約されており、これらのデフォルトは非常に低いIO需要につながります。CPU使用率は直接ではありません制約されていますが、IO消費スロットルによって間接的に制約されており、デフォルト設定では通常、無視できる程度に近くなります。
自動バキュームはテーブルをロックしますが、通常の操作(SELECT、UPDATE、DELETE)には影響しませんが、インデックスの追加やテーブルの切り捨てなどには影響しません。 Autovacuumは通常、それ自体をキャンセルし、何かをブロックしていることを検出するとロックを放棄しますが、「ラップアラウンドを防止する」モードの場合はそれを行いません。
自動バキュームはデフォルトでオンになっています。オフにしないでください。オフピーク時間に手動バキュームを実行することは問題ありませんが、手動バキュームが逃したものをキャッチするためのバックストップとして自動バキュームをオンのままにします。