

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

# 在 Aurora PostgreSQL 中使用本機寫入轉送
<a name="aurora-postgresql-write-forwarding"></a>

 *本機 (叢集內) 寫入轉送*允許您的應用程式直接在 Aurora 複本上發出讀取/寫入交易。然後，寫入命令會轉送到要遞交的寫入器資料庫執行個體。您可以針對偶爾寫入的應用程式使用本機寫入轉送，並要求*先寫後讀一致性*，也就是能夠讀取交易中最新寫入的能力。

 不使用寫入轉送時，您的應用程式必須完全拆分所有讀取和寫入流量，維護兩組資料庫連線，才能將流量傳送到適當的端點。僅供讀取複本會以非同步方式從寫入器執行個體接收更新。此外，由於複寫延遲在僅供讀取複本之間可能不同，因此在所有複本之間實現全域讀取一致性並不容易。您必須處理寫入器資料庫執行個體上需要先寫後讀一致性的任何讀取。或者，您需要開發複雜的自訂應用程式邏輯，才能利用多個僅供讀取複本來實現可擴展性，同時確保一致性。

 透過寫入轉送，您可以避免分割這些交易或將它們單獨傳送到寫入器執行個體。您也不必開發複雜的應用程式邏輯，即可實現*先寫後讀一致性*。

 本機寫入轉送在每個提供 Aurora PostgreSQL 的區域均可使用。其支援以下的 Aurora PostgreSQL 版本：
+ 16.4 版和更新的 16 版本
+ 15.8 版和更新的 15 版本
+ 14.13 版和更新的 14 版本

 本機寫入轉送會用於轉送區域內複本的寫入。若要轉送來自全域複本的寫入，請參閱 [在 Amazon Aurora 全域資料庫中使用寫入轉送](aurora-global-database-write-forwarding.md)。

**Topics**
+ [Aurora PostgreSQL 中本機寫入轉送的限制和考量](aurora-postgresql-write-forwarding-limitations.md)
+ [設定 Aurora PostgreSQL 以進行本機寫入轉送](aurora-postgresql-write-forwarding-configuring.md)
+ [使用 Aurora PostgreSQL 的本機寫入轉送](aurora-postgresql-write-forwarding-understanding.md)
+ [在 Aurora PostgreSQL 中監控本機寫入轉送](aurora-postgresql-write-forwarding-monitoring.md)

# Aurora PostgreSQL 中本機寫入轉送的限制和考量
<a name="aurora-postgresql-write-forwarding-limitations"></a>

 下列限制目前適用於 Aurora PostgreSQL 中的本機寫入轉送：
+  RDS Proxy 不支援本機寫入轉送。
+  當您在具有寫入轉送的 Aurora PostgreSQL 中使用某些陳述式時，系統不允許使用這些陳述式或這些陳述式可能會產生過時的結果。此外，不支援使用者定義的函數和使用者定義的程序。因此，資料庫叢集的 `EnableLocalWriteForwarding` 設定預設為關閉。在開啟此功能之前，請檢查以確定您的應用程式程式碼不受上述任何限制的影響。
+  寫入轉送不支援下列 SQL 陳述式類型：
**注意**  
您可以在應用程式中隱含地使用這些陳述式，或由 PostgreSQL 通訊協定推斷。例如，PL/SQL 例外狀況處理可能會導致使用 SAVEPOINT，這不是支援的陳述式。
  +  `ANALYZE` 
  +  `CLUSTER` 
  +  `COPY` 
  + 游標 – 不支援游標，因此請務必在使用本機寫入轉送之前將其關閉。
  +  資料定義語言 (DDL) 陳述式 
  +  `GRANT`\$1`REVOKE`\$1`REASSIGN OWNED`\$1`SECURITY LABEL`
  +  `LISTEN / NOTIFY` 
  +  `LOCK` 
  +  `SAVEPOINT` 
  +  `SELECT INTO` 
  +  `SET CONSTRAINTS` 
  +  序列更新：`nextval()`、`setval()`
  +  `TRUNCATE` 
  +  兩階段遞交命令：`PREPARE TRANSACTION`、`COMMIT PREPARED`、`ROLLBACK PREPARED`
  + 使用者定義的函數和使用者定義的程序。
  +  `VACUUM` 

 您可以考慮使用下列 SQL 陳述式搭配寫入轉送：
+ DML 陳述式可能包含多個部分，例如 `INSERT ... SELECT` 陳述式或 `DELETE ... WHERE` 陳述式。在這種情況下，系統會將整個陳述式轉送到寫入器資料庫執行個體並在該處執行陳述式。
+ 資料操作語言 (DML) 陳述式，例如 `INSERT`、`DELETE` 和 `UPDATE`。
+  包含此清單中陳述式的 `EXPLAIN` 陳述式
+  `PREPARE` 和 `EXECUTE` 陳述式。
+  `SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }` 陳述式。

# 設定 Aurora PostgreSQL 以進行本機寫入轉送
<a name="aurora-postgresql-write-forwarding-configuring"></a>

 使用下列各節，您可以為 Amazon Aurora PostgreSQL 資料庫叢集啟用本機寫入轉送、設定一致性層級，以及使用寫入轉送管理交易。

## 啟用本機寫入轉送
<a name="aurora-postgresql-write-forwarding-enabling"></a>

 根據預設，Aurora PostgreSQL 資料庫叢集不會啟用本機寫入轉送功能。您能夠在叢集層級啟用本機寫入轉送，而非執行個體層級。

### 主控台
<a name="aurora-postgresql-write-forwarding-enabling.CON"></a>

 使用 AWS 管理主控台，當您建立或修改資料庫叢集時，選取**僅供讀取複本寫入轉送**中的**開啟本機寫入轉送**核取方塊。

### AWS CLI
<a name="aurora-postgresql-write-forwarding-enabling.CLI"></a>

 若要使用 AWS CLI 啟用本機寫入轉送，請使用 `--enable-local-write-forwarding` 選項。當您使用 `create-db-cluster` 命令建立新的資料庫叢集時，此選項會起作用。當您使用 `modify-db-cluster` 命令修改現有的資料庫叢集時，此選項也會起作用。您可以使用 `--no-enable-local-write-forwarding` 選項搭配這些相同的 CLI 命令來停用本機寫入轉送。

 下列範例會建立啟用本機寫入轉送的 Aurora PostgreSQL 資料庫叢集。

```
                        aws rds create-db-cluster \
                        --db-cluster-identifier write-forwarding-test-cluster \
                        --enable-local-write-forwarding \
                        --engine aurora-postgresql \
                        --engine-version 16.4 \
                        --master-username myuser \
                        --master-user-password mypassword \
                        --backup-retention 1
```

 然後，您可以建立寫入器和讀取器資料庫執行個體，以便您可以使用寫入轉送。如需更多詳細資訊，請參閱 [建立 Amazon Aurora 資料庫叢集](Aurora.CreateInstance.md)。

### RDS API
<a name="aurora-postgresql-write-forwarding-enabling.API"></a>

 若要使用 Amazon RDS API 啟用本機寫入轉送，請將 `EnableLocalWriteForwarding` 參數設定為 `true`。當您使用 `CreateDBCluster` 操作建立新的資料庫叢集時，此參數會起作用。當您使用 `ModifyDBCluster` 操作修改現有的資料庫叢集時，此選項也會起作用。您可以將 `EnableLocalWriteForwarding` 參數設定為 `false` 來停用本機寫入轉送。

### 啟用資料庫工作階段的本機寫入轉送
<a name="aurora-postgresql-write-forwarding-enabling-session"></a>

 `apg_write_forward.consistency_mode` 參數是啟用寫入轉送的資料庫參數和資料庫叢集參數。您可以指定 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF` 以實現讀取一致性層級。若要進一步了解一致性層級，請參閱[Aurora PostgreSQL 中本機寫入轉送的一致性與隔離](#aurora-postgresql-write-forwarding-isolation)。

 下列規則適用於此參數：
+ 預設值為 `SESSION`。
+  只有將 `apg_write_forward.consistency_mode` 設定為 `EVENTUAL`、`SESSION` 或 `GLOBAL` 時，才能使用本機寫入轉送。此參數僅在啟用本機寫入轉送之資料庫叢集的讀取器執行個體中啟用。
+ 將值設定為 `OFF` 會停用工作階段中的本機寫入轉送。

## Aurora PostgreSQL 中本機寫入轉送的一致性與隔離
<a name="aurora-postgresql-write-forwarding-isolation"></a>

您可以控制僅供讀取複本上的讀取一致性程度。您可以調整讀取一致性層級，以確保在任何後續查詢之前，您都可以在僅供讀取複本中看見工作階段中的所有轉送寫入操作。您也可以使用此設定，確保僅供讀取複本上的查詢永遠會看到寫入器資料庫執行個體的最新更新。即使是由其他工作階段或其他叢集所提交的更新。若要為應用程式指定這種行為類型，請為工作階段層級參數 `apg_write_forward.consistency_mode` 選擇適當的值。該 `apg_write_forward.consistency_mode` 參數只會對啟用本機寫入轉送的僅供讀取複本產生影響。

**注意**  
對於 `apg_write_forward.consistency_mode` 參數，您可以指定值 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF`。根據預設，系統會將此值設為 `SESSION`。將值設定為 `OFF` 會停用寫入轉送。

當您提高一致性層級時，您的應用程式會花費更多時間，等待變更傳播至僅供讀取複本。您可以選擇在較低延遲之間的平衡，並確保在查詢執行之前，在其他位置所做的變更完全可用。

對於每個可用的一致性模式設定，效果如下：
+ `SESSION` – 僅供讀取複本上使用本機寫入轉送的工作階段會看到該工作階段中所做之所有變更的結果。無論交易是否已遞交，這些變更都是可見的。如有必要，查詢會等待轉送寫入操作的結果複寫到目前的讀取器資料庫執行個體。它不會等待來自寫入操作的更新結果，這些寫入操作的執行位置位於目前資料庫叢集內的其他工作階段。
+ `EVENTUAL` – 僅供讀取複本上使用本機寫入轉送的工作階段可能會看到由於複寫延遲而稍微過時的資料。在寫入器資料庫執行個體上執行寫入操作以及複寫至僅供讀取複本之前，不會顯示相同工作階段中的寫入操作結果。查詢不會等待更新的結果變成可用。因此，它可能會擷取較舊的資料或更新的資料，視陳述式的時間和複寫延遲量而定。
+ `GLOBAL` – 僅供讀取複本上的工作階段會看到該工作階段所做的變更。它也會看到寫入器資料庫執行個體和其他僅供讀取複本的所有遞交變更。每個查詢可能會等待一段時間，長短取決於工作階段的延遲量。自查詢開始的時間起，當僅供讀取複本與寫入器資料庫執行個體中的所有遞交資料都是最新時，查詢就會繼續。
**注意**  
全域一致性模式會影響工作階段中執行的查詢延遲。即使工作階段未傳送任何寫入查詢，也會執行等待。
+ `OFF` – 本機寫入轉送已停用。

在使用寫入轉送的工作階段中，您可以使用 `REPEATABLE READ` 和 `READ COMMITTED` 隔離層級。不過，不支援 `SERIALIZABLE` 隔離層級。

 如需寫入轉送中所含所有參數的詳細資訊，請參閱 [寫入轉送的預設參數設定](aurora-postgresql-write-forwarding-understanding.md#aurora-postgresql-write-forwarding-params)。

## 具有寫入轉送的交易存取模式
<a name="aurora-postgresql-write-forwarding-txns"></a>

如果交易存取模式設定為唯讀，則不會使用本機寫入轉送。您可以在連線至已啟用本機寫入轉送的資料庫叢集和工作階段時，將存取模式設定為僅讀取寫入。

如需交易存取模式的詳細資訊，請參閱[設定交易](https://www.postgresql.org/docs/current/sql-set-transaction.html)。

# 使用 Aurora PostgreSQL 的本機寫入轉送
<a name="aurora-postgresql-write-forwarding-understanding"></a>

使用下列各節，您可以檢查資料庫叢集是否已啟用本機寫入轉送、檢視相容性考量，以及查看可設定的參數和身分驗證設定。此資訊可讓您取得詳細資訊，以有效利用 Aurora PostgreSQL 中的本機寫入轉送功能。

**注意**  
當叢集中使用本機寫入轉送的寫入器執行個體重新啟動時，使用本機寫入轉送的讀取器執行個體上任何作用中的轉送交易和查詢都會自動關閉。當寫入器執行個體再次可用之後，您可以重試這些交易。

## 檢查資料庫叢集是否已啟用本機寫入轉送
<a name="aurora-postgresql-write-forwarding-describing"></a>

若要確定您是否可以在資料庫叢集中使用本機寫入轉送，請確認該叢集的屬性 `LocalWriteForwardingStatus` 設定為 `enabled`。

在 AWS 管理主控台 中，叢集的詳細資訊頁面上的**組態**標籤，您可以看到**本機僅供讀取複本寫入轉送**的狀態為**啟用**。

若要查看所有叢集的本機寫入轉送設定狀態，請執行下列 AWS CLI 命令。

**Example**  

```
aws rds describe-db-clusters \
--query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}'

[
{
"LocalWriteForwardingStatus": "enabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-1"
},
{
"LocalWriteForwardingStatus": "disabled",
"DBClusterIdentifier": "write-forwarding-test-cluster-2"
},
{
"LocalWriteForwardingStatus": "requested",
"DBClusterIdentifier": "test-global-cluster-2"
},
{
"LocalWriteForwardingStatus": "null",
"DBClusterIdentifier": "aurora-postgresql-v2-cluster"
}
]
```

資料庫叢集可以具有以下值 `LocalWriteForwardingStatus`：
+ `disabled` – 本機寫入轉送已停用。
+ `disabling` – 本機寫入轉送正處於停用的過程。
+ `enabled` – 本機寫入轉送已啟用。
+ `enabling` – 本機寫入轉送正處於啟用的過程。
+ `null` – 本機寫入轉送不適用於此資料庫叢集。
+ `requested` – 已請求本機寫入轉送，但尚未作用中。

## 寫入轉送的預設參數設定
<a name="aurora-postgresql-write-forwarding-params"></a>

Aurora 叢集參數群組包含本機寫入轉送功能的設定。因為這些是叢集參數，所以每個叢集中的所有資料庫執行個體都有這些變數的相同值。下表列出了有關這些參數的詳細資訊，並在表格後面附有使用注意事項。


| 參數 | 範圍 | 類型 | 預設值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| apg\$1write\$1forward.connect\$1timeout | Session (工作階段) | 秒 | 30 | 0–2147483647 | 
| apg\$1write\$1forward.consistency\$1mode | 工作階段 (Session) | enum | Session (工作階段) | SESSION, EVENTUAL, GLOBAL, 和 OFF | 
| apg\$1write\$1forward.idle\$1in\$1transaction\$1session\$1timeout | Session (工作階段) | 毫秒 | 86400000 | 0–2147483647 | 
| apg\$1write\$1forward.idle\$1session\$1timeout | Session (工作階段) | 毫秒 | 300000 | 0–2147483647 | 
| apg\$1write\$1forward.max\$1forwarding\$1connections\$1percent | 全球服務 | int | 25 | 1–100 | 

`apg_write_forward.max_forwarding_connections_percent` 參數是可用於處理從讀取器轉送之查詢的資料庫連線上限。此上限的表示方式是寫入器資料庫執行個體的 `max_connections` 設定百分比。例如，如果 `max_connections` 是 `800`，且 `apg_write_forward.max_forwarding_connections_percent` 是 `10`，則寫入器允許最多 80 個同時轉送的工作階段。這些連線來自 `max_connections` 設定所管理的相同連線集區。此設定僅適用於叢集已啟用本機寫入轉送功能的寫入器資料庫執行個體。

使用下列設定來控制本機寫入轉送請求：
+ `apg_write_forward.consistency_mode` – 工作階段層級參數，用於控制僅供讀取複本的讀取一致性程度。有效值為 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF`。根據預設，系統會將此值設為 `SESSION`。將值設定為 `OFF` 會停用工作階段中的本機寫入轉送。若要進一步了解一致性層級，請參閱[Aurora PostgreSQL 中本機寫入轉送的一致性與隔離](aurora-postgresql-write-forwarding-configuring.md#aurora-postgresql-write-forwarding-isolation)。此參數僅在啟用本機寫入轉送的讀取器執行個體中啟用。
+ `apg_write_forward.connect_timeout` – 在建立寫入器資料庫執行個體的連線時，僅供讀取複本在放棄之前等待的秒數上限。值 `0` 表示無限期等待。
+ `apg_write_forward.idle_in_transaction_session_timeout` – 寫入器資料庫執行個體在關閉讀取器執行個體之前，等待從具有開啟交易之僅供讀取複本轉送的連線上活動的毫秒數。如果在此期間之後工作階段在交易中仍處於閒置狀態，則 Aurora 會終止工作階段。值為 `0` 會停用逾時。
+ `apg_write_forward.idle_session_timeout` – 寫入器資料庫執行個體在關閉讀取器執行個體之前，等待從僅供讀取複本轉送的連線上活動的毫秒數。如果工作階段在此期間之後仍處於閒置狀態，則 Aurora 會終止工作階段。值為 `0` 會停用逾時。

## rdswriteforwarduser
<a name="aurora-postgresql-write-forwarding-rdswriteforwarduser"></a>

 `rdswriteforwarduser` 是我們用來在僅供讀取複本與寫入器資料庫執行個體之間建立連線的使用者。

**注意**  
`rdswriteforwarduser` 透過 PUBLIC 角色將其 CONNECT 權限繼承至客戶資料庫。如果撤銷 PUBLIC 角色的權限，您將需要針對轉送寫入所需的資料庫 GRANT CONNECT 權限。

# 在 Aurora PostgreSQL 中監控本機寫入轉送
<a name="aurora-postgresql-write-forwarding-monitoring"></a>

使用下列各節，您可以監控 Aurora PostgreSQL 叢集中的本機寫入轉送，包括相關的 CloudWatch 指標和等待事件，以追蹤效能並識別潛在問題。

## 用於寫入轉送的 Amazon CloudWatch 指標和 Aurora PostgreSQL 狀態變數
<a name="aurora-postgresql-write-forwarding-cloudwatch"></a>

 當您在一或多個僅供讀取複本上使用寫入轉送時，下列 Amazon CloudWatch 指標適用於寫入器資料庫執行個體。


| CloudWatch 指標 | 單位和描述 | 
| --- | --- | 
| `AuroraLocalForwardingWriterDMLThroughput`  | 計數 (每秒) 此寫入器資料庫執行個體每秒處理的轉送 DML 陳述式數目。 | 
|  `AuroraLocalForwardingWriterOpenSessions`  | 計數。此寫入器資料庫執行個體處理轉送查詢的開啟工作階段數目。 | 
|  `AuroraLocalForwardingWriterTotalSessions`  | 計數。此寫入器資料庫執行個體上轉送的工作階段總數。 | 

 下列 CloudWatch 指標適用於每個僅供讀取複本。這些指標的測量是在啟用本機寫入轉送的資料庫叢集中，每個讀取器資料庫執行個體上進行。


| CloudWatch 指標 | 單位和描述 | 
| --- | --- | 
|  `AuroraForwardingReplicaCommitThroughput` |  計數 (每秒) 此複本每秒轉送之工作階段中的遞交數目。 | 
|  `AuroraForwardingReplicaDMLLatency` |  毫秒。複本上轉送 DML 的平均回應時間 (以毫秒為單位)。 | 
|  `AuroraForwardingReplicaDMLThroughput` |  計數 (每秒) 每秒在此複本上處理的轉送 DML 陳述式數目。 | 
|  `AuroraForwardingReplicaErrorSessionsLimit` |  計數。由於達到連線數上限或寫入轉送連線數上限而被寫入器資料庫執行個體拒絕的工作階段數目。 | 
|  `AuroraForwardingReplicaOpenSessions`  |  計數。在複本執行個體上使用本機寫入轉送的工作階段數目。 | 
|  `AuroraForwardingReplicaReadWaitLatency` | 毫秒。複本等待與寫入器資料庫執行個體的 LSN 保持一致的平均等待時間 (毫秒)。讀取器資料庫執行個體等待的程度取決於 apg\$1write\$1forward.consistency\$1mode 設定。如需有關此設定的詳細資訊，請參閱 [Aurora PostgreSQL 中寫入轉送的組態參數](aurora-global-database-write-forwarding-apg.md#aurora-global-database-write-forwarding-params-apg)。 | 

## Aurora PostgreSQL 中本機寫入轉送的等待事件
<a name="aurora-postgresql-write-forwarding-wait-events-apg"></a>

當您搭配 Aurora PostgreSQL 使用寫入轉送時，Amazon Aurora 會產生下列等待事件。

**Topics**
+ [IPC:AuroraWriteForwardConnect](#apg-waits.ipcaurorawriteforwardconnect)
+ [IPC:AuroraWriteForwardConsistencyPoint](#apg-waits.ipcaurorawriteforwardconsistencypoint)
+ [IPC:AuroraWriteForwardExecute](#apg-waits.ipc:aurorawriteforwardexecute)
+ [IPC:AuroraWriteForwardGetGlobalConsistencyPoint](#apg-waits.ipc:aurorawriteforwardgetglobalconsistencypoint)
+ [IPC:AuroraWriteForwardXactAbort](#apg-waits.ipc:aurorawriteforwardxactabort)
+ [IPC:AuroraWriteForwardXactCommit](#apg-waits.ipc:aurorawriteforwardxactcommit)
+ [IPC:AuroraWriteForwardXactStart](#apg-waits.ipc:aurorawriteforwardxactstart)

### IPC:AuroraWriteForwardConnect
<a name="apg-waits.ipcaurorawriteforwardconnect"></a>

當僅供讀取複本上的後端程序正在等待寫入器資料庫執行個體的連線開啟時，就會發生 `IPC:AuroraWriteForwardConnect` 事件。

**等待時間增加的可能原因**

隨著從僅供讀取複本到寫入器節點的連線嘗試次數增加，此事件也會增加。

**動作**

減少從僅供讀取複本到寫入器節點的同時連線數目。

### IPC:AuroraWriteForwardConsistencyPoint
<a name="apg-waits.ipcaurorawriteforwardconsistencypoint"></a>

`IPC:AuroraWriteForwardConsistencyPoint` 事件描述來自僅供讀取複本上節點的查詢將等待轉送的寫入操作的結果複寫到目前區域的時間。只有在工作階段層級參數 `apg_write_forward.consistency_mode` 設定為下列其中一項時，才會產生此事件：
+ `SESSION` – 僅供讀取複本上的查詢會等待該工作階段中所做之所有變更的結果。
+ `GLOBAL` – 僅供讀取複本上的查詢會等待該工作階段所做的變更結果，以及寫入器資料庫執行個體和僅供讀取複本的所有遞交變更。

如需有關 `apg_write_forward.consistency_mode` 參數設定的資訊，請參閱 [Aurora PostgreSQL 中寫入轉送的組態參數](aurora-global-database-write-forwarding-apg.md#aurora-global-database-write-forwarding-params-apg)。

**等待時間增加的可能原因**

等待時間較長的常見原因如下：
+ 根據 Amazon CloudWatch `ReplicaLag` 指標所衡量的複本延遲增加。如需此指標的詳細資訊，請參閱 [監控 Aurora PostgreSQL 複寫](AuroraPostgreSQL.Replication.md#AuroraPostgreSQL.Replication.Monitoring)。
+ 增加寫入器資料庫執行個體或僅供讀取複本的負載。

**動作**

請根據應用程式的需求變更一致性模式。

### IPC:AuroraWriteForwardExecute
<a name="apg-waits.ipc:aurorawriteforwardexecute"></a>

當僅供讀取複本上的後端程序正在等待轉送的查詢完成，並從資料庫叢集的寫入器節點取得結果時，就會發生 `IPC:AuroraWriteForwardExecute` 事件。

**等待時間增加的可能原因**

等待時間增加的常見原因包括：
+ 從寫入器節點擷取大量的行。
+ 寫入器節點與僅供讀取複本之間的網路延遲增加，會增加僅供讀取複本從寫入器節點接收資料所花費的時間。
+ 增加僅供讀取複本的負載可能會延遲查詢請求從僅供讀取複本傳輸到寫入器節點。
+ 寫入器節點上的負載增加，可能會延遲將資料從寫入器節點傳輸至僅供讀取複本。

**動作**

根據等待事件的原因，我們會建議不同的動作。
+ 最佳化查詢以僅擷取必要的資料。
+ 將資料處理語言 (DML) 操作最佳化，以僅修改必要的資料。
+ 如果僅供讀取複本或寫入器節點受到 CPU 或網路頻寬的限制，請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

### IPC:AuroraWriteForwardGetGlobalConsistencyPoint
<a name="apg-waits.ipc:aurorawriteforwardgetglobalconsistencypoint"></a>

當僅供讀取複本上使用全域一致性模式的後端程序在執行查詢之前等待從寫入器節點取得全域一致性點時，就會發生 `IPC:AuroraWriteForwardGetGlobalConsistencyPoint` 事件。

**等待時間增加的可能原因**

等待時間增加的常見原因包括：
+ 僅供讀取複本與寫入器節點之間的網路延遲增加，會增加僅供讀取複本從寫入器節點接收資料所花費的時間。
+ 增加僅供讀取複本的負載可能會延遲查詢請求從僅供讀取複本傳輸到寫入器節點。
+ 寫入器節點上的負載增加，可能會延遲將資料從寫入器節點傳輸至僅供讀取複本。

**動作**

根據等待事件的原因，我們會建議不同的動作。
+ 請根據應用程式的需求變更一致性模式。
+ 如果僅供讀取複本或寫入器節點受到 CPU 或網路頻寬的限制，請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

### IPC:AuroraWriteForwardXactAbort
<a name="apg-waits.ipc:aurorawriteforwardxactabort"></a>

僅供讀取複本上的後端程序正在等待遠端清除查詢的結果時，就會發生 `IPC:AuroraWriteForwardXactAbort` 事件。在中止寫入轉送的交易之後，會發出清除查詢以將程序返回到適當的狀態。Amazon Aurora 執行這些操作可能是因為發現錯誤，也可能是因為使用者發出了明確的 `ABORT` 命令或取消了正在執行的查詢。

**等待時間增加的可能原因**

等待時間增加的常見原因包括：
+ 僅供讀取複本與寫入器節點之間的網路延遲增加，會增加僅供讀取複本從寫入器節點接收資料所花費的時間。
+ 增加僅供讀取複本的負載可能會延遲將清除查詢請求從僅供讀取複本傳輸到寫入器節點。
+ 寫入器節點上的負載增加，可能會延遲將資料從寫入器節點傳輸至僅供讀取複本。

**動作**

根據等待事件的原因，我們會建議不同的動作。
+ 調查中止交易的原因。
+ 如果僅供讀取複本或寫入器資料庫執行個體受到 CPU 或網路頻寬的限制，請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

### IPC:AuroraWriteForwardXactCommit
<a name="apg-waits.ipc:aurorawriteforwardxactcommit"></a>

當僅供讀取複本上的後端程序正在等待轉送的 commit 交易命令的結果時，就會發生 `IPC:AuroraWriteForwardXactCommit` 事件。

**等待時間增加的可能原因**

等待時間增加的常見原因包括：
+ 僅供讀取複本與寫入器節點之間的網路延遲增加，會增加僅供讀取複本從寫入器節點接收資料所花費的時間。
+ 增加僅供讀取複本的負載可能會延遲查詢請求從僅供讀取複本傳輸到寫入器節點。
+ 寫入器節點上的負載增加，可能會延遲將資料從寫入器節點傳輸至僅供讀取複本。

**動作**

如果僅供讀取複本或寫入器節點受到 CPU 或網路頻寬的限制，請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

### IPC:AuroraWriteForwardXactStart
<a name="apg-waits.ipc:aurorawriteforwardxactstart"></a>

當僅供讀取複本上的後端程序正在等待轉送的 start 交易命令的結果時，就會發生 `IPC:AuroraWriteForwardXactStart` 事件。

**等待時間增加的可能原因**

等待時間增加的常見原因包括：
+ 僅供讀取複本與寫入器節點之間的網路延遲增加，會增加僅供讀取複本從寫入器節點接收資料所花費的時間。
+ 增加僅供讀取複本的負載可能會延遲查詢請求從僅供讀取複本傳輸到寫入器節點。
+ 寫入器節點上的負載增加，可能會延遲將資料從寫入器節點傳輸至僅供讀取複本。

**動作**

如果僅供讀取複本或寫入器節點受到 CPU 或網路頻寬的限制，請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。