

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

# Timeout:VacuumDelay
<a name="wait-event.timeoutvacuumdelay"></a>

`Timeout:VacuumDelay` 事件表示已超過清空 I/O 的成本限制，並且清空程序已進入休眠狀態。清空操作會停止一段時間，長度為各自成本延遲參數中指定的持續時間，然後恢復其運作。對於手動清空命令，延遲是在 `vacuum_cost_delay` 參數中指定。對於自動清空常駐程式，延遲是在 `autovacuum_vacuum_cost_delay parameter.` 中指定。

**Topics**
+ [支援的引擎版本](#wait-event.timeoutvacuumdelay.context.supported)
+ [Context](#wait-event.timeoutvacuumdelay.context)
+ [等待時間增加的可能原因](#wait-event.timeoutvacuumdelay.causes)
+ [動作](#wait-event.timeoutvacuumdelay.actions)

## 支援的引擎版本
<a name="wait-event.timeoutvacuumdelay.context.supported"></a>

所有 RDS for PostgreSQL 版本都支援此等待事件資訊。

## Context
<a name="wait-event.timeoutvacuumdelay.context"></a>

PostgreSQL 同時具有自動清空常駐程式和手動清空命令。對於 RDS for PostgreSQL 資料庫執行個體，自動清空程序預設為「開啟」。手動清空命令是根據需要而使用，例如，用來清除失效元組的資料表或產生新的統計資料。

進行清空時，PostgreSQL 會在系統執行各種 I/O 操作時，使用內部計數器來追蹤預估的成本。當計數器達到成本限制參數所指定的值時，執行操作的程序休眠一段時間，長度為成本延遲參數中指定的短暫持續時間。然後，它會重設計數器並繼續操作。

清空程序具有可以用來調節資源耗用的參數。自動清空和手動清空命令具有自己的參數，用於設定成本限制值。它們還有自己的參數來指定成本延遲，這是達到限制時將清空置於休眠狀態的時間量。如此一來，成本延遲參數會當作資源耗用的限流機制運作。在下列清單中，您可以找到這些參數的描述。

**影響自動清空常駐程式限流的參數**
+ `[autovacuum\$1vacuum\$1cost\$1limit](https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-COST-LIMIT)` – 指定用於自動清空操作的成本限制值。增加此參數的設定可讓清空程序使用更多資源並減少 `Timeout:VacuumDelay` 等待事件。
+ `[autovacuum\$1vacuum\$1cost\$1delay](https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-COST-DELAY)` – 指定用於自動清空操作的成本延遲值。預設值為 2 毫秒。將延遲參數設為 0 會關閉限流機制，因此 `Timeout:VacuumDelay` 等待事件不會出現。

如需詳細資訊，請參閱 PostgreSQL 文件中的[自動資料清理](https://www.postgresql.org/docs/current/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-COST-DELAY)。

**影響手動清空程序限流的參數**
+ `vacuum_cost_limit` – 清空程序進入休眠狀態的閾值。根據預設，限制為 200。此數字代表各種資源所需額外 I/O 的累計成本預估值。增加此值可減少 `Timeout:VacuumDelay` 等待事件的數量。
+ `vacuum_cost_delay` – 達到清空成本限制時，清空程序休眠的時間量。預設設定為 0，表示此功能已關閉。您可以將此值設為整數值，以指定開啟此功能的毫秒數，但建議您將其保留為預設設定。

如需 `vacuum_cost_delay` 參數的詳細資訊，請參閱 PostgreSQL 文件中的[資源耗用](https://www.postgresql.org/docs/current/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST)。

若要進一步了解如何設定和使用自動清空搭配 RDS for PostgreSQL，請參閱 [在 Amazon RDS for PostgreSQL 上使用 PostgreSQL 自動清空](Appendix.PostgreSQL.CommonDBATasks.Autovacuum.md)。

## 等待時間增加的可能原因
<a name="wait-event.timeoutvacuumdelay.causes"></a>

`Timeout:VacuumDelay` 會受到成本限制參數設定 (`vacuum_cost_limit`、`autovacuum_vacuum_cost_limit`) 與控制清空休眠持續時間的成本延遲參數 (`vacuum_cost_delay`、`autovacuum_vacuum_cost_delay`) 之間的平衡影響。提高成本限制參數值允許清空使用更多資源，然後再進入休眠狀態。這會導致更少的 `Timeout:VacuumDelay` 等待事件。增加其中一個延遲參數會導致 `Timeout:VacuumDelay` 等待事件更頻繁地發生，時段更長。

`autovacuum_max_workers` 參數設定也可以增加 `Timeout:VacuumDelay` 的數量。每個額外的自動清空工作者程序都有助於內部計數器機制，因此可以比使用單一自動清空工作者程序更快地達到限制。由於達到成本限制的速度更快，成本延遲會更頻繁地生效，造成更多的 `Timeout:VacuumDelay` 等待事件。如需詳細資訊，請參閱 PostgreSQL 文件中的 [autovacuum\$1max\$1worker](https://www.postgresql.org/docs/current/runtime-config-autovacuum.html#GUC-AUTOVACUUM-MAX-WORKERS)。

大型物件 (例如 500 GB 或更大) 也會引發此等待事件，因為清空可能需要一些時間才能完成處理大型物件。

## 動作
<a name="wait-event.timeoutvacuumdelay.actions"></a>

如果清空操作如預期完成，則不需要修補。換言之，此等待事件不一定指出問題。其表示清空將進入休眠一段時間，長度為延遲參數中指定的時段，以便資源可以套用到需要完成的其他程序。

如果您想要清空操作更快地完成，則可以降低延遲參數。這可以縮短清空休眠的時間。