

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

# 在 Aurora MySQL 全球資料庫中使用寫入轉送
<a name="aurora-global-database-write-forwarding-ams"></a>

**Topics**
+ [Aurora MySQL 中寫入轉發的區域和版本可用性](#aurora-global-database-write-forwarding-regions-versions-ams)
+ [在 Aurora MySQL 中啟用寫入轉送](#aurora-global-database-write-forwarding-enabling-ams)
+ [在 Aurora MySQL 中檢查次要叢集是否已啟用寫入轉送](#aurora-global-database-write-forwarding-describing-ams)
+ [Aurora MySQL 中應用程式和 SQL 與寫入轉送的相容性](#aurora-global-database-write-forwarding-compatibility-ams)
+ [Aurora MySQL 中寫入轉送的隔離與一致性](#aurora-global-database-write-forwarding-isolation-ams)
+ [在 Aurora MySQL 中使用寫入轉送執行多部分陳述式](#aurora-global-database-write-forwarding-multipart-ams)
+ [Aurora MySQL 中具有寫入轉送的交易](#aurora-global-database-write-forwarding-txns-ams)
+ [Aurora MySQL 中寫入轉送的組態參數](#aurora-global-database-write-forwarding-params-ams)
+ [Aurora MySQL 中寫入轉送的 Amazon CloudWatch 指標](#aurora-global-database-write-forwarding-cloudwatch-ams)
+ [用於寫入轉送的 Aurora MySQL 狀態變數](#aurora-global-database-write-forwarding-status-ams)

## Aurora MySQL 中寫入轉發的區域和版本可用性
<a name="aurora-global-database-write-forwarding-regions-versions-ams"></a>

在每個可使用 Aurora MySQL 全球資料庫的區域中，Aurora MySQL 2.08.1 及更高版本都支援寫入轉送。

如需 Aurora MySQL 全球資料庫的版本和區域可用性的詳細資訊，請參閱 [使用 Aurora MySQL 的 Aurora 全域資料庫](Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.md#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.amy)。

## 在 Aurora MySQL 中啟用寫入轉送
<a name="aurora-global-database-write-forwarding-enabling-ams"></a>

根據預設，當您將次要叢集新增至 Aurora 全域資料庫時，不會啟用寫入轉送。

若要使用 AWS 管理主控台 啟用寫入轉送，請在為全球資料庫新增區域時，選取**僅供讀取複本寫入轉送**中的**開啟全域寫入轉送**選項。對於現有的次要叢集，請將叢集修改為**開啟全域寫入轉送**。若要關閉寫入轉送，請在新增區域或修改次要叢集時，清除**開啟全域寫入轉送**核取方塊。

 若要使用 AWS CLI 啟用寫入轉送，請使用 `--enable-global-write-forwarding` 選項。當您使用 `create-db-cluster` 命令建立新的次要叢集時，此選項會起作用。當您使用 `modify-db-cluster` 命令修改現有的次要叢集時，此選項也會起作用。其要求全域資料庫使用支援寫入轉送的 Aurora 版本。您可以使用 `--no-enable-global-write-forwarding` 選項搭配這些相同的 CLI 命令來關閉寫入轉送。

 若要使用 Amazon RDS API 啟用寫入轉送，請將 `EnableGlobalWriteForwarding` 參數設定為 `true`。當您使用 `CreateDBCluster` 操作建立新的次要叢集時，此參數會起作用。當您使用 `ModifyDBCluster` 操作修改現有的次要叢集時，此選項也會起作用。其要求全域資料庫使用支援寫入轉送的 Aurora 版本。您可以將 `EnableGlobalWriteForwarding` 參數設定為 `false` 來關閉寫入轉送。

**注意**  
若要讓資料庫執行階段使用寫入轉送，請指定 `aurora_replica_read_consistency` 組態參數的設定。在使用寫入轉送功能的每個工作階段中執行這項操作。如需此參數的相關資訊，請參閱 [Aurora MySQL 中寫入轉送的隔離與一致性](#aurora-global-database-write-forwarding-isolation-ams)。  
RDS 代理功能不支援 `aurora_replica_read_consistency` 變數的 `SESSION` 值。設定此值可能會導致未預期的行為。

下列 CLI 範例顯示如何設定已啟用或停用寫入轉送的 Aurora 全域資料庫。反白顯示的項目代表在設定 Aurora 全域資料庫的基礎設施時，要保持一致的重要指定指令和選項。

 下列範例會建立 Aurora 全域資料庫、主要叢集和啟用寫入轉送的次要叢集。將您自己的選擇替換為使用者名稱、密碼以及主要和次要 AWS 區域。

```
# Create overall global database.
aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

# Create primary cluster, in the same AWS Region as the global database.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-1 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --master-username user_name --master-user-password password \
  --region us-east-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-1

# Create secondary cluster, in a different AWS Region than the global database,
# with write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2 \
  --enable-global-write-forwarding

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-east-2
```

 下列範例會從前一個範例繼續。此範例會建立一個沒有啟用寫入轉送的次要叢集，然後啟用寫入轉送。完成此範例之後，全域資料庫中的所有次要叢集都已啟用寫入轉送。

```
# Create secondary cluster, in a different AWS Region than the global database,
# without write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region us-west-1

aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \
  --region us-east-2 \
  --enable-global-write-forwarding
```

## 在 Aurora MySQL 中檢查次要叢集是否已啟用寫入轉送
<a name="aurora-global-database-write-forwarding-describing-ams"></a>

 若要判斷是否可以從次要叢集使用寫入轉送，您可以檢查叢集是否具有屬性 `"GlobalWriteForwardingStatus": "enabled"`。

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

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

次要叢集會顯示值 `"enabled"` 或 `"disabled"`，指出寫入轉送是開啟或關閉。`null` 值表示該叢集無法使用寫入轉送。此叢集不屬於全域資料庫，或是主要叢集，而是次要叢集。如果寫入轉送處於開啟或關閉的程序中，此值也可以 `"enabling"` 是 `"disabling"`。

**Example**  

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

[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    },
    {
        "GlobalWriteForwardingStatus": "disabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2"
    },
    {
        "GlobalWriteForwardingStatus": null,
        "DBClusterIdentifier": "non-global-cluster"
    }
]
```

 若要尋找已啟用全域寫入轉送的次要叢集，請執行下列命令。此命令也會傳回叢集的讀取者端點。當您使用寫入轉送從 Aurora 全域資料庫的次要叢集到主要叢集時，您可以使用次要叢集的讀取者端點。

**Example**  

```
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]'
[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    }
]
```

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

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

 當您在具有寫入轉送的全域資料庫中使用某些陳述式時，系統不允許使用這些陳述式或這些陳述式可能會產生過時的結果。因此，次要叢集的 `EnableGlobalWriteForwarding` 設定預設為關閉。在開啟此功能之前，請檢查以確定您的應用程式程式碼不受上述任何限制的影響。

 下列限制適用於您與寫入轉送搭配使用的 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;
```
 您可以將資料載入次要叢集上的臨時資料表。不過，請確定您執行的任何 `LOAD` 陳述式只參照主要叢集上的永久資料表。

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

```
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;
```

## Aurora MySQL 中寫入轉送的隔離與一致性
<a name="aurora-global-database-write-forwarding-isolation-ams"></a>

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

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

**重要**  
務必為您要轉送寫入的任何工作階段設定 `aurora_replica_read_consistency` 參數。否則，Aurora 不會啟用該工作階段的寫入轉送。此參數預設為空值，因此當您使用此參數時，請選擇特定值。該 `aurora_replica_read_consistency` 參數只會對啟用寫入轉送的次要叢集產生影響。  
針對 Aurora MySQL 2 版和低於 3.04 的 3 版，請使用 `aurora_replica_read_consistency` 作為工作階段變數。針對 Aurora MySQL 3.04 版及更新版本，您可以使用 `aurora_replica_read_consistency` 作為工作階段變數或作為資料庫叢集參數。

 對於 `aurora_replica_read_consistency` 參數，您可以指定值 `EVENTUAL`、`SESSION` 和 `GLOBAL`。

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

 將讀取一致性設定為 `EVENTUAL` 後，使用寫入轉送之次要 AWS 區域中的查詢可能會看到由於複寫延遲而稍微過時的資料。在主要區域上執行寫入操作並複寫到目前的區域之前，不會顯示相同工作階段中寫入操作的結果。查詢不會等待更新的結果變成可用。因此，它可能會擷取較舊的資料或更新的資料，視陳述式的時間和複寫延遲量而定。

 將讀取一致性設為 `SESSION` 後，次要 AWS 區域中使用寫入轉送的所有查詢都會看到該工作階段中所做之所有變更的結果。無論交易是否已遞交，這些變更都是可見的。如有必要，查詢會等待轉送寫入操作的結果複寫到目前的區域。其不會等待來自寫入操作的更新結果，這些寫入操作的執行位置位於其他區域或目前區域內其他工作階段。

 將讀取一致性設為 `GLOBAL` 後，次要 AWS 區域中的工作階段會看到該工作階段所做的變更。其也可以看到來自主要 AWS 區域和其他次要 AWS 區域的所有已遞交變更。每個查詢可能會等待一段時間，長短取決於工作階段的延遲量。自查詢開始的時間起，當次要叢集與主要叢集中的所有遞交資料都是最新時，查詢就會繼續。

 如需寫入轉送中所含所有參數的詳細資訊，請參閱 [Aurora MySQL 中寫入轉送的組態參數](#aurora-global-database-write-forwarding-params-ams)。

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

這些範例使用 `aurora_replica_read_consistency` 作為工作階段變數。針對 Aurora MySQL 3.04 版及更新版本，您可以使用 `aurora_replica_read_consistency` 作為工作階段變數或作為資料庫叢集參數。

在以下範例中，主要叢集位於美國東部 (維吉尼亞北部) 區域。次要叢集位於美國東部 (俄亥俄) 區域中。此範例顯示在執行 `INSERT` 陳述式後接著執行 `SELECT` 陳述式的效果。視 `aurora_replica_read_consistency` 設定的值而定，結果可能會因陳述式的時間而有所不同。為了實現更高的一致性，在發出 `SELECT` 陳述式之前，您可能需要稍作等待。或者，Aurora 可以自動等待結果完成複寫，然後再繼續進行 `SELECT`。

在此範例中，具有讀取一致性設定 `eventual`。立即執行 `INSERT` 陳述式，然後執行 `SELECT` 陳述式，仍會傳回 `COUNT(*)` 的值。該值反映插入新列之前的列數。稍後再次執行 `SELECT` 會傳回更新的資料列計數。這些 `SELECT` 陳述式不會等待。

```
mysql> set aurora_replica_read_consistency = 'eventual';
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)
```

如果讀取一致性設定為 `session`，則在 `SELECT` 陳述式中的變更顯示前，`INSERT` 陳述式會在 `INSERT` 等待後立即執行。後續的 `SELECT` 陳述式不會等待。

```
mysql> set aurora_replica_read_consistency = 'session';
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)
```

 將讀取一致性設定設為 `global` 後，每個 `SELECT` 陳述式都會等待，以確保自陳述式開始時間起的所有資料變更都可見，然後再執行查詢。等待每個 `SELECT` 陳述式的時間會根據主要和次要叢集之間的複寫延遲量而有所不同。

```
mysql> set aurora_replica_read_consistency = 'global';
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)
```

## 在 Aurora MySQL 中使用寫入轉送執行多部分陳述式
<a name="aurora-global-database-write-forwarding-multipart-ams"></a>

 DML 陳述式可能包含多個部分，例如 `INSERT ... SELECT` 陳述式或 `DELETE ... WHERE` 陳述式。在這種情況下，系統會將整個陳述式轉送到主要叢集並在該處執行陳述式。

## Aurora MySQL 中具有寫入轉送的交易
<a name="aurora-global-database-write-forwarding-txns-ams"></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 會復原交易。

 當寫入轉送變成無法使用時，可能會發生這種類型的錯誤。例如，如果您重新啟動主要叢集或關閉寫入轉送組態設定，Aurora 就會取消任何使用寫入轉送的交易。

## Aurora MySQL 中寫入轉送的組態參數
<a name="aurora-global-database-write-forwarding-params-ams"></a>

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


| 名稱 | 範圍 | 類型 | 預設值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| aurora\$1fwd\$1master\$1idle\$1timeout (Aurora MySQL 第 2 版) | 全球服務  | 不帶正負號整數 | 60 | 1–86,400 | 
| aurora\$1fwd\$1master\$1max\$1connections\$1pct (Aurora MySQL 第 2 版) | 全球服務 | 不帶正負號長整數 | 10 | 0–90 | 
| aurora\$1fwd\$1writer\$1idle\$1timeout (Aurora MySQL 第 3 版) | 全球服務 | 不帶正負號整數 | 60 | 1–86,400 | 
| aurora\$1fwd\$1writer\$1max\$1connections\$1pct (Aurora MySQL 第 3 版) | 全球服務 | 不帶正負號長整數 | 10 | 0–90 | 
| aurora\$1replica\$1read\$1consistency | 工作階段適用於低於 3.04 的第 2 版和第 3 版工作階段，全域適用於第 3.04 版及更高版本 | 列舉 | '' (null) | EVENTUAL, SESSION, GLOBAL | 

若要控制次要叢集的傳入寫入請求，請在主要叢集上使用這些設定：
+  `aurora_fwd_master_idle_timeout`、`aurora_fwd_writer_idle_timeout`：主要叢集在關閉從次要叢集轉送的連線前等待活動的秒數。如果工作階段在此期間之後仍處於閒置狀態，則 Aurora 會取消工作階段。
+  `aurora_fwd_master_max_connections_pct`、`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%。如果您在任何次要叢集上啟用查詢轉送，此設定必須為非零值，才能成功從次要叢集進行寫入操作。如果值為零，則寫入操作會收到含有訊息 `ER_CON_COUNT_ERROR` 的錯誤碼 `Not enough connections on writer to handle your request`。

`aurora_replica_read_consistency` 參數會啟用寫入轉送。您可以在每個工作階段中使用。您可以指定 `EVENTUAL` `SESSION` 或 `GLOBAL` 以實現讀取一致性層級。若要進一步了解一致性層級，請參閱[Aurora MySQL 中寫入轉送的隔離與一致性](#aurora-global-database-write-forwarding-isolation-ams)。下列規則適用於此參數：
+  預設值為 '' (空白)。
+ 只有在 `aurora_replica_read_consistency` 設定為 `EVENTUAL`、`SESSION` 或 `GLOBAL` 時，才能在工作階段中使用寫入轉送。此參數僅在啟用寫入轉送之次要叢集的讀取器執行個體中，且該次要叢集位於 Aurora 全域資料庫中才有意義。
+  您無法在多陳述式交易中設定此變量 (當為空時) 或取消設定 (當已經設定時)。但是，您可以在此類交易期間將其從一個有效值 (`EVENTUAL`、`SESSION`、或 `GLOBAL`) 變更為另一個有效值 (`EVENTUAL`、`SESSION`、或 `GLOBAL`)。
+  當次要叢集上未啟用寫入轉送時，此變數不得是 `SET`。

## Aurora MySQL 中寫入轉送的 Amazon CloudWatch 指標
<a name="aurora-global-database-write-forwarding-cloudwatch-ams"></a>

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


| CloudWatch 指標 | 單位 | 描述 | 
| --- | --- | --- | 
|  `AuroraDMLRejectedMasterFull`  | 計數 |  由於寫入器資料庫執行個體上的工作階段已滿，因此拒絕的轉送查詢數量。 適用於 Aurora MySQL 第 2 版。  | 
|  `AuroraDMLRejectedWriterFull`  | 計數 |  由於寫入器資料庫執行個體上的工作階段已滿，因此拒絕的轉送查詢數量。 適用於 Aurora MySQL 3 版。  | 
|  `ForwardingMasterDMLLatency`  | 毫秒 |  處理寫入器資料庫執行個體上每個轉送 DML 陳述式的平均時間。 它不包括次要叢集轉送寫入請求的時間，或將變更複寫至次要叢集的時間。 適用於 Aurora MySQL 第 2 版。  | 
|  `ForwardingMasterDMLThroughput`  | 每秒計數 |  此寫入器資料庫執行個體每秒處理的轉送 DML 陳述式數目。 適用於 Aurora MySQL 第 2 版。  | 
|  `ForwardingMasterOpenSessions`  | 計數 |  寫入器資料庫執行個體上轉送的工作階段數目。 適用於 Aurora MySQL 第 2 版。  | 
|  `ForwardingWriterDMLLatency`  | 毫秒 |  處理寫入器資料庫執行個體上每個轉送 DML 陳述式的平均時間。 它不包括次要叢集轉送寫入請求的時間，或將變更複寫至次要叢集的時間。 適用於 Aurora MySQL 3 版。  | 
|  `ForwardingWriterDMLThroughput`  | 每秒計數 | 此寫入器資料庫執行個體每秒處理的轉送 DML 陳述式數目。適用於 Aurora MySQL 3 版。 | 
|  `ForwardingWriterOpenSessions`  | 計數 | 寫入器資料庫執行個體上轉送的工作階段數目。適用於 Aurora MySQL 3 版。 | 

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


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

## 用於寫入轉送的 Aurora MySQL 狀態變數
<a name="aurora-global-database-write-forwarding-status-ams"></a>

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


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

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


| Aurora MySQL 狀態變數 | 單位 | 描述 | 
| --- | --- | --- | 
| 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-global-database-write-forwarding-ams.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 陳述式總持續時間。 | 