

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

# 在 Amazon Aurora MySQL 資料庫叢集中使用本機寫入轉送
<a name="aurora-mysql-write-forwarding"></a>

*本機 (叢集內) 寫入轉送*允許您的應用程式直接在 Aurora 複本上發出讀取/寫入交易。然後，這些交易會轉送至要提交的寫入器資料庫執行個體。您可以當應用程式要求*先寫後讀一致性*時使用本機寫入轉送，能夠讀取交易中最新寫入的能力。

僅供讀取複本會以非同步方式從寫入器接收更新。如果沒有寫入轉送，您必須在寫入器資料庫執行個體上處理任何需要先寫後讀一致性的讀取。否則，您必須開發複雜的自訂應用程式邏輯，才能利用多個僅供讀取複本來實現可擴展性。您的應用程式必須完全拆分所有讀取和寫入流量，維護兩組資料庫連線，才能將流量傳送到正確的端點。當查詢是應用程式內單一邏輯工作階段的一部分，或是交易時，這類部署會讓應用程式設計過於複雜。此外，由於僅供讀取複本的複寫延遲可能不同，因此很難在資料庫中的所有執行個體達到全域讀取一致性。

寫入轉送可以避免拆分交易或以專門的方式傳送至寫入器，進而簡化應用程式開發作業。借助這項新功能，可讓您輕鬆現需要讀取交易最新寫入並且工作負載對寫入延遲不敏感的讀取擴展。

本機寫入轉送與全域寫入轉送不同，全域寫入轉送會將寫入從次要資料庫叢集轉送至 Aurora 全球資料庫中的主要資料庫叢集。您可以在屬於 Aurora 全球資料庫一部分的資料庫叢集中使用本機寫入轉送。如需更多詳細資訊，請參閱 [在 Amazon Aurora 全域資料庫中使用寫入轉送](aurora-global-database-write-forwarding.md)。

本機寫入轉送需要 Aurora MySQL 3.04 版或更新版本。

**Topics**
+ [啟用本機寫入轉送](aurora-mysql-write-forwarding-enabling.md)
+ [檢查資料庫叢集是否已啟用寫入轉送](#aurora-mysql-write-forwarding-describing)
+ [應用程式和 SQL 與寫入轉送的相容性](#aurora-mysql-write-forwarding-compatibility)
+ [寫入轉送的隔離層級](#aurora-mysql-write-forwarding-isolation)
+ [寫入轉送的讀取一致性](aurora-mysql-write-forwarding-consistency.md)
+ [使用寫入轉送執行多部分陳述式](#aurora-mysql-write-forwarding-multipart)
+ [具有寫入轉送的交易](#aurora-mysql-write-forwarding-txns)
+ [寫入轉送的組態參數](#aurora-mysql-write-forwarding-params)
+ [用於寫入轉送的 Amazon CloudWatch 指標和 Aurora MySQL 狀態變數](aurora-mysql-write-forwarding-cloudwatch.md)
+ [識別轉送的交易和查詢](#aurora-write-forwarding-processlist)

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

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

**重要**  
您也可以針對使用二進位記錄的跨區域僅供讀取複本啟用本機寫入轉送，但寫入操作不會轉送至來源 AWS 區域。寫入操作會轉送至 binlog 僅供讀取複本叢集的寫入器資料庫執行個體。  
只有當您擁有寫入次要 binlog 僅供讀取複本的使用案例時，才使用此方法 AWS 區域。否則，您最終可能會面臨「大腦分裂」的情況，其複寫的資料集彼此不一致。  
除非絕對必要，否則我們建議您在全球資料庫上使用全域寫入轉送，而不要在跨區域僅供讀取複本上使用本機寫入轉送。如需更多詳細資訊，請參閱 [在 Amazon Aurora 全域資料庫中使用寫入轉送](aurora-global-database-write-forwarding.md)。

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

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

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

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

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

```
aws rds create-db-cluster \
  --db-cluster-identifier write-forwarding-test-cluster \
  --enable-local-write-forwarding \
  --engine aurora-mysql \
  --engine-version 8.0.mysql_aurora.3.04.0 \
  --master-username myuser \
  --master-user-password mypassword \
  --backup-retention 1
```

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

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

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

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

`aurora_replica_read_consistency` 參數是啟用寫入轉送的資料庫參數和資料庫叢集參數。您可以指定 `EVENTUAL` `SESSION` 或 `GLOBAL` 以實現讀取一致性層級。若要進一步了解一致性層級，請參閱[寫入轉送的讀取一致性](aurora-mysql-write-forwarding-consistency.md)。

下列規則適用於此參數：
+ 預設值為 '' (null)。
+ 只有將 `aurora_replica_read_consistency` 設定為 `EVENTUAL`、`SESSION` 或 `GLOBAL` 時，才能使用寫入轉送。此參數僅在啟用寫入轉送之資料庫叢集的讀取器執行個體中啟用。
+ 您無法在多陳述式交易中設定此參數 (當為空時) 或取消其設定 (當已經設定時)。這類交易期間，您可以將其從一個有效值變更為另一個有效值，但我們不建議您執行此動作。

## 檢查資料庫叢集是否已啟用寫入轉送
<a name="aurora-mysql-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-mysql-v2-cluster"
    }
]
```

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

## 應用程式和 SQL 與寫入轉送的相容性
<a name="aurora-mysql-write-forwarding-compatibility"></a>

您可以使用以下類型的 SQL 陳述式搭配寫入轉送：
+ 資料操作語言 (DML) 陳述式，例如 `INSERT`、`DELETE` 和 `UPDATE`。這些陳述式的屬性有一些限制，您可以將這些屬性與寫入轉送搭配使用，如下所述。
+ `SELECT ... LOCK IN SHARE MODE` 和 `SELECT FOR UPDATE` 陳述式。
+ `PREPARE` 和 `EXECUTE` 陳述式。

當您在具有寫入轉送的資料庫叢集中使用某些陳述式時，系統不允許使用這些陳述式或這些陳述式可能會產生過時的結果。此外，不支援使用者定義的函數和使用者定義的程序。因此，資料庫叢集將 `EnableLocalWriteForwarding` 設定預設為停用。在啟用此功能之前，請檢查以確定您的應用程式的程式碼不受上述任何限制的影響。

下列限制適用於您與寫入轉送搭配使用的 SQL 陳述式。在某些情況下，您可以在啟用寫入轉送的資料庫叢集上使用陳述式。如果在工作階段中的寫入轉送啟用方式不是透過 `aurora_replica_read_consistency` 組態參數，則此方法有效。在不允許此方法時嘗試使用陳述式，因為寫入轉送導致，您將看到類似於下列的錯誤訊息：

```
ERROR 1235 (42000): This version of MySQL doesn't yet support 'operation with write forwarding'.
```

**資料定義語言 (DDL)**  
連線到寫入器資料庫執行個體以執行 DDL 陳述式。您無法從讀取器資料庫執行個體執行。

**使用臨時資料表中的資料更新永久資料表**  
您可以在啟用寫入轉送的資料庫叢集上使用臨時資料表。但是，如果陳述式參照臨時資料表，則無法使用 DML 陳述式來修改永久資料表。例如，您不能使用從臨時資料表取得資料的 `INSERT ... SELECT` 陳述式。

**XA 交易**  
在工作階段中啟用寫入轉送時，您無法在資料庫叢集上使用下列陳述式。您可以在未啟用寫入轉送的資料庫叢集上，或在 `aurora_replica_read_consistency` 設定為空的工作階段中使用這些陳述式。在工作階段中啟用寫入轉送之前，請檢查您的程式碼是否使用這些陳述式。  

```
XA {START|BEGIN} xid [JOIN|RESUME]
XA END xid [SUSPEND [FOR MIGRATE]]
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER [CONVERT XID]
```

**永久資料表的 LOAD 陳述式**  
您無法在啟用寫入轉送的資料庫叢集上使用下列陳述式。  

```
LOAD DATA INFILE 'data.txt' INTO TABLE t1;
LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;
```

**外掛程式陳述式**  
您無法在啟用寫入轉送的資料庫叢集上使用下列陳述式。  

```
INSTALL PLUGIN example SONAME 'ha_example.so';
UNINSTALL PLUGIN example;
```

**儲存點陳述式**  
在工作階段中啟用寫入轉送時，您無法在資料庫叢集上使用下列陳述式。您可以在未啟用寫入轉送的資料庫叢集上，或在 `aurora_replica_read_consistency` 設定為空的工作階段中使用這些陳述式。在工作階段中啟用寫入轉送之前，請檢查您的程式碼是否使用這些陳述式。  

```
SAVEPOINT t1_save;
ROLLBACK TO SAVEPOINT t1_save;
RELEASE SAVEPOINT t1_save;
```

## 寫入轉送的隔離層級
<a name="aurora-mysql-write-forwarding-isolation"></a>

在使用寫入轉送的工作階段中，您只能使用 `REPEATABLE READ` 隔離層級。雖然您也可以使用 Aurora 複本的 `READ COMMITTED` 隔離層級，但該隔離層級不適用於寫入轉送。如需 `REPEATABLE READ` 和 `READ COMMITTED` 隔離層級的相關資訊，請參閱 [Aurora MySQL 隔離層級](AuroraMySQL.Reference.IsolationLevels.md)。

# 寫入轉送的讀取一致性
<a name="aurora-mysql-write-forwarding-consistency"></a>

您可以控制資料庫叢集上的讀取一致性程度。讀取一致性層級會決定資料庫叢集在每次讀取操作之前的等待時間，以確保從寫入器複寫部分或全部變更。您可以調整讀取一致性層級，以確保在任何後續查詢之前，您都可以在資料庫叢集中看見工作階段中的所有轉送寫入操作。您也可以使用此設定，確保資料庫叢集上的查詢永遠會看到寫入器的最新更新。此設定也適用於由其他工作階段或其他叢集提交的查詢。若要為應用程式指定這種行為類型，請選擇 `aurora_replica_read_consistency` 資料庫叢集參數的值或資料庫叢及參數。

**重要**  
當您要轉送寫入時，永遠設定 `aurora_replica_read_consistency` 資料庫參數或資料庫叢集參數。如果您不這樣做，則 Aurora 不會轉送寫入。此參數預設為空值，因此當您使用此參數時，請選擇特定值。`aurora_replica_read_consistency` 參數只會影響資料庫叢集或已啟用寫入轉送的執行個體。

當您提高一致性層級時，您的應用程式會花費更多時間，等待在資料庫執行個體之間傳播變更。您可以選擇在快速回應時間之間的平衡，並確保在查詢執行之前，在其他資料庫執行個體所做的變更完全可用。

您可以為 `aurora_replica_read_consistency` 參數指定下列參數值：
+ `EVENTUAL` – 在寫入器資料庫執行個體上執行寫入作業之前，不會顯示相同工作階段中的寫入作業結果。查詢不會等待更新的結果變成可用。因此，它可能會擷取較舊的資料或更新的資料，視陳述式的時間和複寫延遲量而定。這與沒有使用寫入轉送的 Aurora MySQL 資料庫叢集的一致性相同。
+ `SESSION` – 使用寫入轉送的所有查詢都會查看在該工作階段中所做的所有變更。無論交易是否已遞交，這些變更都是可見的。如有必要，查詢會等待轉送寫入操作複寫的結果。
+ `GLOBAL` – 工作階段會查看資料庫叢集中所有工作階段和執行個體的所有已提交變更。每個查詢可能會等待一段時間，長短取決於工作階段的延遲量。自查詢開始的時間起，當資料庫叢集與寫入器中的所有遞交資料都是最新時，查詢就會繼續。

如需寫入轉送中所含組態參數的詳細資訊，請參閱 [寫入轉送的組態參數](aurora-mysql-write-forwarding.md#aurora-mysql-write-forwarding-params)。

**注意**  
您也可以使用 `aurora_replica_read_consistency` 作為工作階段變數，例如：  

```
mysql> set aurora_replica_read_consistency = 'session';
```

## 使用寫入轉送的範例
<a name="aurora-mysql-write-forwarding-examples"></a>

下列範例顯示在執行 `INSERT` 陳述式後接著執行 `SELECT` 陳述式時 `aurora_replica_read_consistency` 參數的效果。視 `aurora_replica_read_consistency` 值和陳述式時間而定，結果可能會有所不同。

為了實現更高的一致性，在發出 `SELECT` 陳述式之前，您可能需要稍作等待。或者，Aurora 可以自動等待結果完成複寫，然後再繼續進行 `SELECT`。

如需設定資料庫參數的資訊，請參閱[Amazon Aurora 的參數群組](USER_WorkingWithParamGroups.md)。

**Example 並將 `aurora_replica_read_consistency` 設為 `EVENTUAL`**  
執行 `INSERT` 陳述式，緊接著 `SELECT` 陳述式，傳回 `COUNT(*)` 的值與插入新一列之前的資料列數。稍後再次執行 `SELECT` 會傳回更新的資料列計數。這些 `SELECT` 陳述式不會等待。  

```
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

mysql> insert into t1 values (6); select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)
```

**Example 並將 `aurora_replica_read_consistency` 設為 `SESSION`**  
`INSERT` 之後的 `SELECT` 陳述式會立即等待，直到看見 `INSERT` 陳述式的變更。後續的 `SELECT` 陳述式不會等待。  

```
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.01 sec)

mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1;
Query OK, 1 row affected (0.08 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.37 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)
```
將讀取一致性設定仍設為 `SESSION` 後，執行 `INSERT` 陳述式後稍等一下，讓更新的資料列計數可在下一個 `SELECT` 陳述式執行時使用。  

```
mysql> insert into t1 values (6); select sleep(2); select count(*) from t1;
Query OK, 1 row affected (0.07 sec)
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)
```

**Example 並將 `aurora_replica_read_consistency` 設為 `GLOBAL`**  
每個 `SELECT` 陳述式都會等待，以確保自陳述式開始時間起的所有資料變更都可見，然後再執行查詢。每個 `SELECT` 陳述式等待的時間會有所不同，根據複寫延遲的數量而定。  

```
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.75 sec)

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.37 sec)

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.66 sec)
```

## 使用寫入轉送執行多部分陳述式
<a name="aurora-mysql-write-forwarding-multipart"></a>

DML 陳述式可能包含多個部分，例如 `INSERT ... SELECT` 陳述式或 `DELETE ... WHERE` 陳述式。在這種情況下，系統會將整個陳述式轉送到寫入器資料庫執行個體並在該處執行陳述式。

## 具有寫入轉送的交易
<a name="aurora-mysql-write-forwarding-txns"></a>

如果交易存取模式設定為唯讀，則不會使用寫入轉送。您可以使用 `SET TRANSACTION` 陳述式或 `START TRANSACTION` 陳述式，來指定交易的存取模式。您也可以透過變更 [transaction\$1read\$1only](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_read_only) 工作階段變數的值，來指定交易存取模式。您只能在連線至已啟用寫入轉送的資料庫叢集時，變更此工作階段值。

如果長時間執行的交易經過很長一段時間內都未發出任何陳述式，則可能會超過閒置逾時期間。此期間的預設值為一分鐘。您可以將 `aurora_fwd_writer_idle_timeout` 參數設定為最多增加一天。超過閒置逾時的交易會被寫入器執行個體取消。您提交的下一個後續陳述式會收到逾時錯誤。然後 Aurora 會復原交易。

當寫入轉送變成無法使用時，可能會發生這種類型的錯誤。例如，如果您重新啟動資料庫叢集或停用寫入轉送，Aurora 就會取消任何使用寫入轉送的交易。

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

## 寫入轉送的組態參數
<a name="aurora-mysql-write-forwarding-params"></a>

Aurora 資料庫參數群組包含寫入轉送功能的設定。下表列出了有關這些參數的詳細資訊，並在表格後面附有使用注意事項。


| 參數 | 範圍 | 類型 | 預設值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| aurora\$1fwd\$1writer\$1idle\$1timeout | 叢集 | 不帶正負號整數 | 60 | 1–86,400 | 
| aurora\$1fwd\$1writer\$1max\$1connections\$1pct | 叢集 | 不帶正負號長整數 | 10 | 0–90 | 
| aurora\$1replica\$1read\$1consistency | 叢集或執行個體 | 列舉 | '' (null) | EVENTUAL, SESSION, GLOBAL | 

若要控制傳入的寫入請求，請使用下列設定：
+ `aurora_fwd_writer_idle_timeout` – 寫入器資料庫執行個體在關閉讀取器執行個體之前，等待從讀取器執行個體轉送的連線上活動的秒數。如果工作階段在此期間之後仍處於閒置狀態，則 Aurora 會取消工作階段。
+ `aurora_fwd_writer_max_connections_pct` – 可在寫入器資料庫執行個體上，用來處理從讀取器執行個體轉送之查詢的資料庫連線上限。此上限的表示方式是寫入器的 `max_connections` 設定百分比。例如，如果 `max_connections` 是 800，且 `aurora_fwd_master_max_connections_pct` 或 `aurora_fwd_writer_max_connections_pct` 是 10，則寫入器允許最多 80 個同時轉送的工作階段。這些連線來自 `max_connections` 設定所管理的相同連線集區。

  此設定僅適用於已啟用寫入轉送功能的寫入器。如果您減少此值，現有的連線不會受到影響。Aurora 在嘗試從資料庫叢集建立新連線時，會考慮設定的新值。預設值為 10，代表該 `max_connections` 值的 10%。

**注意**  
因為 `aurora_fwd_writer_idle_timeout` 和 `aurora_fwd_writer_max_connections_pct`是資料庫叢集參數，所以每個叢集中的所有資料庫執行個體都有這些參數的相同值。

如需 `aurora_replica_read_consistency` 的相關資訊，請參閱 [寫入轉送的讀取一致性](aurora-mysql-write-forwarding-consistency.md)。

如需資料庫參數群組的詳細資訊，請參閱[Amazon Aurora 的參數群組](USER_WorkingWithParamGroups.md)。

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

當您使用 Aurora MySQL 的寫入轉送時，下列 Amazon CloudWatch 指標和 Aurora MySQL 狀態變數適用於資料庫叢集。如需 Aurora MySQL 寫入器和讀取器資料庫執行個體指標的詳細資訊，請參閱下列主題。

**Topics**
+ [Aurora MySQL 寫入器資料庫執行個體的寫入轉送指標](#aurora-mysql-write-forwarding-cloudwatch-writer-metrics)
+ [Aurora MySQL 讀取器資料庫執行個體的寫入轉送指標](#aurora-mysql-write-forwarding-cloudwatch-reader-metrics)

## Aurora MySQL 寫入器資料庫執行個體的寫入轉送指標
<a name="aurora-mysql-write-forwarding-cloudwatch-writer-metrics"></a>

當您在一或多個資料庫叢集上使用寫入轉送時，下列 Amazon CloudWatch 指標適用於資料庫叢集。這些指標都是在寫入器資料庫執行個體上測量的。


| CloudWatch 指標 | 單位 | Description | 
| --- | --- | --- | 
|  `ForwardingWriterDMLLatency`  | 毫秒 |  處理寫入器資料庫執行個體上每個轉送 DML 陳述式的平均時間。 它不包括資料庫叢集轉送寫入請求的時間，或將變更複寫至寫入器的時間。  | 
|  `ForwardingWriterDMLThroughput`   | 每秒計數 | 此寫入器資料庫執行個體每秒處理的轉送 DML 陳述式數目。 | 
|  `ForwardingWriterOpenSessions`  | 計數 | 寫入器資料庫執行個體上轉送的工作階段數目。 | 

當您在一或多個資料庫叢集上使用寫入轉送時，下列 Aurora MySQL 狀態變數適用於資料庫叢集。這些狀態變數都是在寫入器資料庫執行個體上測量的。


| Aurora MySQL 狀態變數 | 單位 | Description | 
| --- | --- | --- | 
| Aurora\$1fwd\$1writer\$1dml\$1stmt\$1count | 計數 | 轉送至此寫入器資料庫執行個體的 DML 陳述式總數。 | 
| Aurora\$1fwd\$1writer\$1dml\$1stmt\$1duration | 微秒 | 轉送至此寫入器資料庫執行個體的 DML 陳述式總持續時間。 | 
| Aurora\$1fwd\$1writer\$1open\$1sessions | 計數 | 寫入器資料庫執行個體上轉送的工作階段數目。 | 
| Aurora\$1fwd\$1writer\$1select\$1stmt\$1count | 計數 | 轉送至此寫入器資料庫執行個體的 SELECT 陳述式總數。 | 
| Aurora\$1fwd\$1writer\$1select\$1stmt\$1duration | 微秒 | 轉送至此寫入器資料庫執行個體的 SELECT 陳述式總持續時間。 | 

## Aurora MySQL 讀取器資料庫執行個體的寫入轉送指標
<a name="aurora-mysql-write-forwarding-cloudwatch-reader-metrics"></a>

下列 CloudWatch 指標是在啟用寫入轉送的資料庫叢集中的每個讀取器資料庫執行個體上進行測量。


| CloudWatch 指標 | 單位 | Description | 
| --- | --- | --- | 
|  `ForwardingReplicaDMLLatency`  | 毫秒 | 複本上轉送 DML 的平均回應時間。 | 
|  `ForwardingReplicaDMLThroughput`  | 每秒計數 | 每秒處理的轉送 DML 陳述式數目。 | 
|  `ForwardingReplicaOpenSessions`  | 計數 | 在讀取器資料庫執行個體上使用寫入轉送的工作階段數目。 | 
|  `ForwardingReplicaReadWaitLatency`  | 毫秒 |  讀取器資料庫執行個體上的 `SELECT` 陳述式等待以追上寫入器的平均等待時間。 讀取器資料庫執行個體在處理查詢之前等待的程度取決於 `aurora_replica_read_consistency` 設定。  | 
|  `ForwardingReplicaReadWaitThroughput`  | 每秒計數 | 轉寄寫入的所有工作階段中每秒處理的 SELECT 陳述式總數。 | 
|   `ForwardingReplicaSelectLatency`  | 毫秒 | 轉送的 SELECT 延遲，平均計算監控期間內所有轉送的 SELECT 陳述式。 | 
|   `ForwardingReplicaSelectThroughput`  | 每秒計數 | 在監控期間內平均每秒轉送的 SELECT 輸送量。 | 

下列 Aurora MySQL 狀態變數是在啟用寫入轉送的資料庫叢集中的每個讀取器資料庫執行個體上進行測量。


| Aurora MySQL 狀態變數 | 單位 | Description | 
| --- | --- | --- | 
| Aurora\$1fwd\$1replica\$1dml\$1stmt\$1count | 計數 | 從此讀取器資料庫執行個體轉送的 DML 陳述式總數。 | 
| Aurora\$1fwd\$1replica\$1dml\$1stmt\$1duration | 微秒 | 從此讀取器資料庫執行個體轉送的所有 DML 陳述式總持續時間。 | 
| Aurora\$1fwd\$1replica\$1errors\$1session\$1limit | 計數 |  主要叢集因下列其中一個錯誤狀況拒絕的工作階段數目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/aurora-mysql-write-forwarding-cloudwatch.html)  | 
| Aurora\$1fwd\$1replica\$1open\$1sessions | 計數 | 在讀取器資料庫執行個體上使用寫入轉送的工作階段數目。 | 
| Aurora\$1fwd\$1replica\$1read\$1wait\$1count | 計數 | 此讀取器資料庫執行個體上先寫後讀的等待總數。 | 
| Aurora\$1fwd\$1replica\$1read\$1wait\$1duration | 微秒 | 由於此讀取器資料庫執行個體的讀取一致性設定，而造成的等待總持續時間。 | 
| Aurora\$1fwd\$1replica\$1select\$1stmt\$1count | 計數 | 從此讀取器資料庫執行個體轉送的 SELECT 陳述式總數。 | 
| Aurora\$1fwd\$1replica\$1select\$1stmt\$1duration | 微秒 | 從此讀取器資料庫執行個體轉送的 SELECT 陳述式總持續時間。 | 

## 識別轉送的交易和查詢
<a name="aurora-write-forwarding-processlist"></a>

您可以使用 `information_schema.aurora_forwarding_processlist` 資料表來識別轉送的交易和查詢。如需此資料表的詳細資訊，請參閱 [information\$1schema.aurora\$1forwarding\$1processlist](AuroraMySQL.Reference.ISTables.md#AuroraMySQL.Reference.ISTables.aurora_forwarding_processlist)。

下列範例顯示寫入器資料庫執行個體上所有轉送的連線。

```
mysql> select * from information_schema.AURORA_FORWARDING_PROCESSLIST where IS_FORWARDED=1 order by REPLICA_SESSION_ID;

+-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+----------------------+----------------+
| ID  | USER     | HOST               | DB       | COMMAND | TIME | STATE        | INFO                                       | IS_FORWARDED | REPLICA_SESSION_ID | REPLICA_INSTANCE_IDENTIFIER     | REPLICA_CLUSTER_NAME | REPLICA_REGION |
+-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+---------------------------------------+
| 648 | myuser   | IP_address:port1   | sysbench | Query   |    0 | async commit | UPDATE sbtest58 SET k=k+1 WHERE id=4802579 |            1 |                637 | my-db-cluster-instance-2        | my-db-cluster        | us-west-2      |
| 650 | myuser   | IP_address:port2   | sysbench | Query   |    0 | async commit | UPDATE sbtest54 SET k=k+1 WHERE id=2503953 |            1 |                639 | my-db-cluster-instance-2        | my-db-cluster        | us-west-2      |
+-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+----------------------+----------------+
```

在轉送讀取器資料庫執行個體上，您可以透過執行 `SHOW PROCESSLIST` 以查看與這些寫入器資料庫連線相關聯的執行緒。寫入器上 `REPLICA_SESSION_ID` 的值 637 和 639，與讀取器上的 `Id` 值相同。

```
mysql> select @@aurora_server_id;

+---------------------------------+
| @@aurora_server_id              |
+---------------------------------+
| my-db-cluster-instance-2        |
+---------------------------------+
1 row in set (0.00 sec)

mysql> show processlist;

+-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+
| Id  | User     | Host               | db       | Command | Time | State        | Info                                        |
+-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+
| 637 | myuser   | IP_address:port1   | sysbench | Query   |    0 | async commit | UPDATE sbtest12 SET k=k+1 WHERE id=4802579  |
| 639 | myuser   | IP_address:port2   | sysbench | Query   |    0 | async commit | UPDATE sbtest61 SET k=k+1 WHERE id=2503953  |
+-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+
12 rows in set (0.00 sec)
```