自動バキューム サーバー パラメーターを構成する

完了

バキューム プロセスは、自動バキューム サーバー パラメーターを使用して構成されます。これにより、ワークロードのバキューム プロセスを最適化できます。 Azure portal で Azure Database for PostgreSQL サーバーを選び、左側のメニューから [サーバー パラメーター] を選びます。 検索バーに「autovacuum」と入力します。 または、SQL を使用してシステム カタログ ビューにクエリを実行し、次のクエリを使用して自動バキュームの現在の構成を検索することもできます。

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
パラメーター名 Default 説明
autovacuum ON 自動バキューム サーバー プロセスを有効または無効にします。 自動バキュームは常に有効にする必要があります。
autovacuum_analyze_scale_factor 0.1 バキューム操作をトリガーするかどうかを決定するときに、autovacuum_vacuum_threshold に追加するテーブルの割合を指定します。 たとえば、0.2 はテーブル サイズの 20% です。
autovacuum_analyze_threshold 50 任意の 1 つのテーブルについて "分析" プロセスをトリガーするために必要な、挿入、更新、または削除された行の数。
autovacuum_freeze_max_age 200000000 トランザクション ID のラップアラウンドを防ぐためにテーブルで自動バキュームをトリガーするまでの最大経過期間 (トランザクション数単位)。
autovacuum_max_workers 3 自動バキューム ランチャーを除く、一度に実行される自動バキューム プロセスの最大数。
autovacuum_multixact_freeze_max_age 400000000 multixact のラップアラウンドを防ぐためにテーブルで自動バキュームをトリガーするまでの最大経過期間 (multixact 単位)。
autovacuum_naptime 60 秒 1 つのデータベースでの自動バキューム プロセスの間の遅延。 各ラウンドで、デーモンがデータベースを調査し、そのデータベースのテーブルに対して、必要に応じて VACUUM コマンドと ANALYZE コマンドを発行します。
autovacuum_vacuum_cost_limit -1 自動バキューム操作の最大コスト。 -1 (既定値) が指定されている場合は、通常の vacuum_cost_limit 値が使用されます。 複数の worker がある場合、この値は実行中の自動バキューム worker 間で均等に配分されます。 各 worker についての合計は、この変数の値を超えることはできません。
autovacuum_vacuum_insert_threshold 1000 任意の 1 つのテーブルのバキュームをトリガーする、挿入された行の数。
autovacuum_vacuum_scale_factor 0.2 autovacuum_vacuum_threshold と共に使用されます。 バキュームをトリガーするかどうかを決定するために使われるテーブルの割合。
autovacuum_vacuum_threshold 50 テーブルでバキュームをトリガーするための、更新、挿入、または削除された行の最小数。
autovacuum_vacuum_insert_scale_factor 0.2 バキューム プロセスをトリガーするために autovacuum_vacuum_insert_threshold に追加するテーブル サイズの割合を指定します。
autovacuum_work_mem -1 KB 各自動バキューム プロセスで使用できる最大メモリ。
log_autovacuum_min_duration -1 自動バキューム アクションがログに記録する時間 (ミリ秒単位)。

バキューム プロセスの実行頻度が多すぎたり少なすぎたりしてはなりません。 最適な頻度は、ワークロードによって異なります。 各自動バキューム パラメーターをテストして、ワークロードに最適なものを見つけます。 バキューム プロセスのコストには次のものが含まれます。

  • バキュームの実行時に、データ ページはロックされます。
  • バキューム プロセスは、コンピューティング時間とメモリを消費します。

テーブル レベルでバキュームを最適化する

Azure Database for PostgreSQL では、テーブル レベルで自動バキューム パラメーターを設定できます。 一部のテーブルが他より多く更新されているときは、これによりパフォーマンスを向上させることができます。 テーブル レベルでの自動バキュームの設定例:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

テーブル レベルでは、自動バキュームは同期プロセスです。 テーブルに含まれるデッド タプルの割合が大きいほど、自動バキューム プロセスによる "コスト" が大きくなります。

更新率が高いテーブルの場合は、テーブルを複数のテーブルに分割することを検討してください。 この分割により、自動バキュームを並列化して、1 つのテーブルの "コスト" を削減できます。 並列自動バキューム worker の数を増やすこともできます。