PostgreSQL バージョン 18 での適応型 autovacuum の機能強化
RDS for PostgreSQL バージョン 18 以降、Amazon RDS は適応型 autovacuum メカニズムを強化し、DB インスタンスがトランザクション ID の循環に近づくと、autovacuum_max_workers を動的にスケーリングします。以前の PostgreSQL バージョンでは、autovacuum_max_workers を変更するには再起動が必要でした。PostgreSQL 18 では、autovacuum_max_workers が動的なパラメータとなり、Amazon RDS が再起動せずに、これを調整できるようになりました。
PostgreSQL 18 では、サーバー起動時に autovacuum ワーカー用にバックエンドプロセスのスロットを予約する新しいパラメータ autovacuum_worker_slots も導入されています。このパラメータは、同時に実行できる autovacuum ワーカーの数の上限を設定します。autovacuum_max_workers はこの値を超えることはできません。autovacuum_max_workers とは異なり、autovacuum_worker_slots を変更するには再起動が必要です。詳細については、PostgreSQL ドキュメントの「autovacuum_worker_slots
適応型 autovacuum がワーカーをスケーリングする方法
PostgreSQL 18 インスタンスで MaximumUsedTransactionIDs CloudWatch メトリクスが 10 億を超えると、Amazon RDS は次の式を使用して autovacuum_max_workers を autovacuum_worker_slots 値まで増加させます。これは autovacuum_worker_slots パラメータのデフォルトの式でもあります。
LEAST(GREATEST({DBInstanceClassMemory/32185783296}, 16), 32)
中小規模のインスタンス (最大 512 GiB のメモリ) の場合、適応型 autovacuum は 16 のワーカーにスケールされます。インスタンスが大きい場合、ワーカーの数はメモリに比例して最大 32 までスケールされます。例えば、db.m5.4xlarge インスタンス (64 GiB) のデフォルトの autovacuum_max_workers は 3 です。MaximumUsedTransactionIDs が 10 億を超えると、Amazon RDS は 16 ワーカーにスケーリングします。
Amazon RDS は、既に設定されている値を減らすことはありません。設定した autovacuum_max_workers が計算値より既に高い場合、Amazon RDS はその値を変更しません。
各 autovacuum ワーカーは、autovacuum_work_mem 設定までのメモリを使用します。適応型 autovacuum がワーカー数を増やすと、autovacuum が消費するメモリの総量は比例して増加します。例えば、autovacuum_work_mem を 1 GB に設定し、適応型 autovacuum が 3 から 16 ワーカーにスケールする場合、autovacuum ワーカーが使用する最大メモリは 3 GB から 16 GB に増加します。
警告
ワーカープロセスとメモリの組み合わせが、autovacuum に割り当てるメモリの合計と一致していることを確認してください。
適応型 autovacuum の変更のモニタリング
autovacuum_max_workers またはその他の autovacuum パラメータが Amazon RDS で変更されると、影響を受ける DB インスタンスでイベントが生成されます。これらのイベントは、AWS マネジメントコンソールまたは Amazon RDS API を通じて表示できます。RDS イベントの詳細については、「Amazon RDS のイベントカテゴリとイベントメッセージ」を参照してください。これらのイベントが発生したときに通知を受け取るには、「Amazon RDS イベント通知にサブスクライブする」を参照してください。
現在のメモリ内 autovacuum 設定を表示するには、DB インスタンスに接続し、次のコマンドを実行します。
SHOW autovacuum_max_workers;
パラメータグループの値は変更されません。Amazon RDS は、これらのパラメータを DB インスタンスのメモリでのみ変更します。MaximumUsedTransactionIDs がしきい値を下回ると、Amazon RDS はパラメータをパラメータグループの値にリセットし、別のイベントを生成します。