場合によっては、大量のを作成した後update
、insert
またはdelete
テーブルからVACUUM FULL ANALYZE
、DBが肥大化していないことを確認するためにを開始しました。本番データベースでこれを行うと、長期間テーブルをブロックすることができたため、これは良いアイデアではなかったことがわかりました。それで、私はプロセスをキャンセルしました、多分ちょうどVACUUM
(完全ではない)試みたか、AUTOVACUUM
それができることは何でも後でやらせます。
問題は、VACUUMまたはAUTOVACUUMを「途中」で停止すると、すでに実行されたすべての処理が失われるのですか?
たとえば、VACUUM
すでに100万のデッド行が見つかって停止した場合、この情報はすべて失われますか?VACUUMは完全にトランザクション的な方法で動作しますか(非常に多くのPostgreSQLプロセスのように、「すべてまたは何もない」)?
すべての作業を失うことなくVACUUMを安全に中断できる場合、vacuum
作業を段階的に行う方法はありますか?[100 ms動作し、停止し、10 ms待機して、残りの世界をブロックしないようにします...]。autovacuumパラメータを調整することでこれの一部を実行できることはわかっていますが、これをプログラムで制御できること、特定の時間/特定の条件下でそれを実行できるようにすることについて考えています。
注:プロセスを停止/キャンセル/強制終了するとは、次のことを意味します。
- pgAdminを使用している場合は、[クエリのキャンセル]ボタンを押します。
- プログラムで作業する場合は、pg_cancel_backend()を呼び出します。
どちらも同等だと思います。シェル/システムレベルのkillコマンドは使用していません。