

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# PostgreSQL 第 18 版中的自適應自動清空增強功能
<a name="Appendix.PostgreSQL.CommonDBATasks.Autovacuum.AdaptivePG18"></a>

從 RDS for PostgreSQL 第 18 版開始，Amazon RDS 增強了自適應自動清空機制，可在資料庫執行個體接近交易 ID 包圍`autovacuum_max_workers`時動態擴展。在舊版 PostgreSQL 中， `autovacuum_max_workers`需要重新啟動才能變更。PostgreSQL 18 會建立`autovacuum_max_workers`動態參數，允許 Amazon RDS 在不重新啟動的情況下進行調整。

PostgreSQL 18 也引進新的參數 `autovacuum_worker_slots`，該參數會在伺服器啟動時為自動清空工作者保留後端程序槽。此參數會設定自動清空工作者可以同時執行的上限 – `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)中的 。

## 自適應自動清空如何擴展工作者
<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 的記憶體），自適應自動清空可擴展到 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_work_mem`設定的記憶體。當自適應自動清空增加工作者數量時，自動清空耗用的總記憶體會按比例增加。例如，如果 `autovacuum_work_mem` 設定為 1 GB，且自適應自動清空從 3 擴展到 16 個工作者，則自動清空工作者使用的最大記憶體會從 3 GB 增加到 16 GB。

**警告**  
請確定工作者程序和記憶體的組合等於您要配置給自動清空的總記憶體。

## 監控自適應自動清空變更
<a name="Appendix.PostgreSQL.CommonDBATasks.Autovacuum.AdaptivePG18.Monitoring"></a>

當 Amazon RDS 修改 `autovacuum_max_workers`或任何其他自動清空參數時，它會為受影響的資料庫執行個體產生事件。您可以在 中或透過 Amazon RDS API AWS 管理主控台 檢視這些事件。如需 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)。

若要檢視目前的記憶體內自動清空設定，請連線至資料庫執行個體並執行下列命令：

```
SHOW autovacuum_max_workers;
```

參數群組值不會變更。Amazon RDS 只會在資料庫執行個體的記憶體中修改這些參數。當 `MaximumUsedTransactionIDs` 低於閾值時，Amazon RDS 會將參數重設為參數群組中的值，並產生另一個事件。