自動バキューム サーバー パラメーターを構成する
バキューム プロセスは、自動バキューム サーバー パラメーターを使用して構成されます。これにより、ワークロードのバキューム プロセスを最適化できます。 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 の数を増やすこともできます。