

# PostgreSQL バージョン 18 での適応型 autovacuum の機能強化
<a name="Appendix.PostgreSQL.CommonDBATasks.Autovacuum.AdaptivePG18"></a>

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 ドキュメントの「[https://www.postgresql.org/docs/devel/runtime-config-vacuum.html#GUC-AUTOVACUUM-WORKER-SLOTS](https://www.postgresql.org/docs/devel/runtime-config-vacuum.html#GUC-AUTOVACUUM-WORKER-SLOTS)」を参照してください。

## 適応型 autovacuum がワーカーをスケーリングする方法
<a name="Appendix.PostgreSQL.CommonDBATasks.Autovacuum.AdaptivePG18.ScalingWorkers"></a>

PostgreSQL 18 インスタンスで [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html) 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](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.Summary.html) インスタンス (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 の変更のモニタリング
<a name="Appendix.PostgreSQL.CommonDBATasks.Autovacuum.AdaptivePG18.Monitoring"></a>

`autovacuum_max_workers` またはその他の autovacuum パラメータが Amazon RDS で変更されると、影響を受ける DB インスタンスでイベントが生成されます。これらのイベントは、AWS マネジメントコンソールまたは Amazon RDS API を通じて表示できます。RDS イベントの詳細については、「[Amazon RDS のイベントカテゴリとイベントメッセージ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)」を参照してください。これらのイベントが発生したときに通知を受け取るには、「[Amazon RDS イベント通知にサブスクライブする](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html)」を参照してください。

現在のメモリ内 autovacuum 設定を表示するには、DB インスタンスに接続し、次のコマンドを実行します。

```
SHOW autovacuum_max_workers;
```

パラメータグループの値は変更されません。Amazon RDS は、これらのパラメータを DB インスタンスのメモリでのみ変更します。`MaximumUsedTransactionIDs` がしきい値を下回ると、Amazon RDS はパラメータをパラメータグループの値にリセットし、別のイベントを生成します。