

# 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 2.08.1 以降のバージョンで、Aurora MySQL ベースのグローバルデータベースが利用可能なすべてのリージョンでサポートされています。

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 Global Database に追加すると、書き込み転送は有効になりません。

AWS マネジメントコンソール を使用して書き込み転送を有効にするには、グローバルデータベースのリージョンを追加するときに、**[リードレプリカの書き込み転送]** の **[グローバル書き込み転送を有効にする]** チェックボックスをオンにします。既存のセカンダリクラスターの場合、クラスターを **[グローバル書き込み転送を有効にする]** に変更します。書き込み転送をオフにするには、リージョンの追加時またはセカンダリクラスターの変更時に、**[グローバル書き込み転送を有効にする]** チェックボックスをオフにします。

 AWS CLI を使用して書き込み転送を有効にするには、`--enable-global-write-forwarding` オプションを使用します。このオプションは、`create-db-cluster` コマンドを使用して新しいセカンダリクラスターを作成するときに機能します。`modify-db-cluster` コマンドを使用して、既存のセカンダリクラスターを変更する場合にも機能します。グローバルデータベースでは、書き込み転送をサポートする Aurora バージョンを使用する必要があります。これらの同じ CLI コマンドで `--no-enable-global-write-forwarding` オプションを使用すると、書き込み転送をオフにすることができます。

 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 Global Database を設定する方法を示しています。強調表示された項目は、Aurora Global Database のインフラストラクチャをセットアップするときに指定し、一貫性を保つために重要なコマンドとオプションを表しています。

 次の例では、書き込み転送が有効になっている Aurora Global Database 、プライマリクラスター、およびセカンダリクラスターを作成します。ユーザー名、パスワード、プライマリとセカンダリの 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 Global Database でセカンダリからプライマリへの書き込み転送を使用するときは、セカンダリクラスターのリーダーエンドポイントを使用します。

**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 ステートメントを使用できます。
+ `INSERT`、`DELETE`、および `UPDATE` などのデータ操作言語 (DML) ステートメント。書き込み転送で使用できるこれらのステートメントのプロパティには、以下で説明するように、いくつかの制限があります。
+ `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 ステートメントを実行します。リーダー DB インスタンスからは実行できません。

**テンポラリテーブルのデータを使用した永続テーブルの更新**  
 書き込み転送が有効になっているセカンダリクラスターでは、テンポラリテーブルを使用できます。ただし、ステートメントがテンポラリテーブルを参照している場合は、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;
```

**SAVEPOINT ステートメント**  
 セッション内で書き込み転送が有効になっている場合、セカンダリクラスターで次のステートメントを使用することはできません。これらのステートメントは、書き込み転送が有効になっていないセカンダリクラスター、または `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` をセッション変数として、または DB クラスターパラメータとして使用できます。

 `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` をセッション変数として、または DB クラスターパラメータとして使用できます。

次の例では、プライマリクラスターが US East (N. Virginia) リージョンにあります。セカンダリクラスターは 米国東部 (オハイオ) リージョンにあります。この例は、`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` の場合、`INSERT` の直後の `SELECT` ステートメントは、`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\_read\_only](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_read_only) セッション変数の値を変更することで、トランザクションアクセスモードを指定することもできます。このセッション値は、書き込み転送が有効な DB クラスターに接続しているときにのみ変更できます。

 長時間実行されるトランザクションがかなりの期間ステートメントを発行しない場合、アイドルタイムアウト期間を超える可能性があります。この期間のデフォルトは 1 分です。1 日まで増やすことができます。アイドルタイムアウトを超えたトランザクションは、プライマリクラスターによってキャンセルされます。次に送信するステートメントは、タイムアウトエラーを受け取ります。その後、Aurora はトランザクションをロールバックします。

 このタイプのエラーは、書き込み転送が使用できなくなった場合に発生する可能性があります。例えば、プライマリクラスターを再起動するか、書き込み転送構成設定を無効にした場合、Aurora は書き込み転送を使用するすべてのトランザクションをキャンセルします。

## Aurora MySQL での書き込み転送の設定パラメータ
<a name="aurora-global-database-write-forwarding-params-ams"></a>

 Aurora クラスターのパラメータグループには、書き込み転送機能の設定が含まれています。これらはクラスターパラメータであるため、各クラスターのすべての DB インスタンスは、これらの可変に同じ値を持ちます。これらのパラメータの詳細を次の表にまとめ、表に続いて使用上の注意を記載してください。


| 名前 | スコープ | タイプ | デフォルト値 | 有効な値 | 
| --- | --- | --- | --- | --- | 
| aurora\_fwd\_master\_idle\_timeout (Aurora MySQL バージョン 2) | グローバル  | 符号なし整数 | 60 | 1-86,400 | 
| aurora\_fwd\_master\_max\_connections\_pct (Aurora MySQL バージョン 2) | グローバル | 符号なし長整数 | 10 | 0-90 | 
| aurora\_fwd\_writer\_idle\_timeout (Aurora MySQL バージョン 3) | グローバル | 符号なし整数 | 60 | 1-86,400 | 
| aurora\_fwd\_writer\_max\_connections\_pct (Aurora MySQL バージョン 3) | グローバル | 符号なし長整数 | 10 | 0-90 | 
| aurora\_replica\_read\_consistency | セッション (バージョン 2 と 3.04 より前のバージョン 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`: リーダーから転送されたクエリを処理するためにライター DB インスタンスで使用できるデータベース接続の上限。これは、プライマリクラスター内の書き込み DB インスタンスの `max_connections` 設定のパーセンテージで表されます。例えば、`max_connections` が800 回、`aurora_fwd_master_max_connections_pct`または`aurora_fwd_writer_max_connections_pct`が 10 回 の場合、書き込みは最大 80 回 の同時転送セッションを許可します。これらの接続は、`max_connections` 設定によって管理される同じ接続プールから取得されます。

   この設定は、1 つ以上のセカンダリクラスターで書き込み転送が有効になっている場合に、プライマリクラスターにのみ適用されます。この値を小さくしても、既存の接続は影響を受けません。Aurora は、セカンダリクラスターから新しい接続を作成するときに、この新しい設定値を参照します。デフォルト値は 10 で、`max_connections` 値の 10% を表します。セカンダリクラスターのいずれかでクエリ転送を有効にする場合、セカンダリクラスターからの書き込みオペレーションを正常に実行するには、この設定に 0 以外の値を指定する必要があります。値が 0 の場合、書き込みオペレーションは、メッセージ `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 Global Database 内にあるセカンダリクラスターのリーダーインスタンスでのみ関係します。
+  マルチステートメントトランザクション内では、この可変を設定する (空の場合) または設定解除する (既に設定されている場合) ことはできません。ただし、トランザクション中に、有効な値 (`EVENTUAL`、`SESSION`、`GLOBAL`) から別の値 (`EVENTUAL`、`SESSION`、`GLOBAL`) に変更することは可能です。
+  セカンダリクラスターで書き込み転送が有効になっていない場合、可変は `SET` に指定できません。

## Aurora MySQL での書き込み転送の Amazon CloudWatch メトリクス
<a name="aurora-global-database-write-forwarding-cloudwatch-ams"></a>

 次の Amazon CloudWatch メトリクスは、1 つ以上のセカンダリクラスターで書き込み転送を使用する場合、プライマリクラスターに適用されます。これらのメトリクスはすべて、プライマリクラスターのライター DB インスタンスで測定されます。


| [CloudWatch メトリクス] | 単位 | 説明 | 
| --- | --- | --- | 
| `AuroraDMLRejectedMasterFull` | カウント | ライター DB インスタンスでセッションが一杯になったために拒否された転送クエリの数。<br />Aurora MySQL バージョン 2 の場合。 | 
| `AuroraDMLRejectedWriterFull` | カウント | ライター DB インスタンスでセッションが一杯になったために拒否された転送クエリの数。<br />Aurora MySQL バージョン 3 の場合。 | 
| `ForwardingMasterDMLLatency` | ミリ秒 | 書き込み DB インスタンスで転送された各 DML ステートメントを処理する平均時間。<br />セカンダリクラスターが書き込みリクエストを転送する時間や、変更をセカンダリクラスターに複製する時間は含まれません。<br />Aurora MySQL バージョン 2 の場合。 | 
| `ForwardingMasterDMLThroughput` | 1 秒あたりのカウント数 | この書き込み DB インスタンスによって 1 秒間に処理される、転送された DML ステートメントの数。<br />Aurora MySQL バージョン 2 の場合。 | 
| `ForwardingMasterOpenSessions` | カウント | 書き込み DB インスタンスで転送されたセッションの数。<br />Aurora MySQL バージョン 2 の場合。 | 
| `ForwardingWriterDMLLatency` | ミリ秒 | 書き込み DB インスタンスで転送された各 DML ステートメントを処理する平均時間。<br />セカンダリクラスターが書き込みリクエストを転送する時間や、変更をセカンダリクラスターに複製する時間は含まれません。<br />Aurora MySQL バージョン 3 の場合。 | 
| `ForwardingWriterDMLThroughput` | 1 秒あたりのカウント数 | この書き込み DB インスタンスによって 1 秒間に処理される、転送された DML ステートメントの数。Aurora MySQL バージョン 3 の場合。 | 
| `ForwardingWriterOpenSessions` | カウント | 書き込み DB インスタンスで転送されたセッションの数。Aurora MySQL バージョン 3 の場合。 | 

 次の CloudWatch メトリクスは、各セカンダリクラスターに適用されます。これらのメトリクスは、書き込み転送が有効になっているセカンダリクラスターのリーダー DB インスタンスで測定されます。


| [CloudWatch メトリクス] | 単位 | 説明 | 
| --- | --- | --- | 
| `ForwardingReplicaDMLLatency` | ミリ秒 | レプリカ上で転送された DML の平均応答時間。 | 
| `ForwardingReplicaDMLThroughput` | 1 秒あたりのカウント数 | 1 秒あたりに処理された転送 DML ステートメントの数。 | 
| `ForwardingReplicaOpenSessions` | カウント | リーダー DB インスタンスで書き込み転送を使用しているセッションの数。 | 
| `ForwardingReplicaReadWaitLatency` | ミリ秒 | リーダー DB インスタンス上の `SELECT` ステートメントがプライマリクラスターに追いつくのを待機する平均待機時間。<br />クエリを処理する前にリーダー DB インスタンスが待機する程度は、`aurora_replica_read_consistency` 設定によって異なります。 | 
| `ForwardingReplicaReadWaitThroughput` | 1 秒あたりのカウント数 | 書き込みを転送しているすべてのセッションで、1 秒間処理した SELECT ステートメントの総数。 | 
|  `ForwardingReplicaSelectLatency` | ミリ秒 | 転送済みSELECTレイテンシー、SELECTモニタリング期間内に転送されたすべてのステートメントの平均値。 | 
|  `ForwardingReplicaSelectThroughput` | 1 秒あたりのカウント数 | モニタリング期間内の 1 秒あたりの転送済み SELECT スループット。 | 

## 書き込み転送のための Aurora MySQL ステータス変数
<a name="aurora-global-database-write-forwarding-status-ams"></a>

 次の Aurora MySQL ステータス変数は、1 つ以上のセカンダリクラスターで書き込み転送を使用するときに、プライマリクラスターに適用されます。これらのメトリクスはすべて、プライマリクラスターのライター DB インスタンスで測定されます。


| Aurora MySQL ステータス変数 | 単位 | 説明 | 
| --- | --- | --- | 
| Aurora\_fwd\_master\_dml\_stmt\_count | カウント | この書き込み DB インスタンスに転送された DML ステートメントの合計数。Aurora MySQL バージョン 2 の場合。 | 
| Aurora\_fwd\_master\_dml\_stmt\_duration | マイクロ秒 | この書き込み DB インスタンスに転送された DML ステートメントの合計期間。<br />Aurora MySQL バージョン 2 の場合。 | 
| Aurora\_fwd\_master\_open\_sessions | カウント | 書き込み DB インスタンスで転送されたセッションの数。<br />Aurora MySQL バージョン 2 の場合。 | 
| Aurora\_fwd\_master\_select\_stmt\_count | カウント | この書き込み DB インスタンスに転送された `SELECT` ステートメントの総数。<br />Aurora MySQL バージョン 2 の場合。 | 
| Aurora\_fwd\_master\_select\_stmt\_duration | マイクロ秒 | この書き込み DB インスタンスに転送された `SELECT` ステートメントの合計期間。<br />Aurora MySQL バージョン 2 の場合。 | 
| Aurora\_fwd\_writer\_dml\_stmt\_count | カウント | この書き込み DB インスタンスに転送された DML ステートメントの合計数。Aurora MySQL バージョン 3 の場合。 | 
| Aurora\_fwd\_writer\_dml\_stmt\_duration | マイクロ秒 | この書き込み DB インスタンスに転送された DML ステートメントの合計期間。 | 
| Aurora\_fwd\_writer\_open\_sessions | カウント | 書き込み DB インスタンスで転送されたセッションの数。Aurora MySQL バージョン 3 の場合。 | 
| Aurora\_fwd\_writer\_select\_stmt\_count | カウント | この書き込み DB インスタンスに転送された `SELECT` ステートメントの総数。Aurora MySQL バージョン 3 の場合。 | 
| Aurora\_fwd\_writer\_select\_stmt\_duration | マイクロ秒 | この書き込み DB インスタンスに転送された `SELECT` ステートメントの合計期間。<br />Aurora MySQL バージョン 3 の場合。 | 

 次の Aurora MySQL ステータス変数は、各セカンダリクラスターに適用されます。これらのメトリクスは、書き込み転送が有効になっているセカンダリクラスターのリーダー DB インスタンスで測定されます。


| Aurora MySQL ステータス変数 | 単位 | 説明 | 
| --- | --- | --- | 
| Aurora\_fwd\_replica\_dml\_stmt\_count | カウント | このリーダー DB インスタンスから転送された DML ステートメントの合計数。 | 
| Aurora\_fwd\_replica\_dml\_stmt\_duration | マイクロ秒 | このリーダー DB インスタンスから転送された DML ステートメントの合計期間。 | 
| Aurora\_fwd\_replica\_errors\_session\_limit | カウント | 以下のエラー条件のいずれかが原因でプライマリクラスターが拒否したセッションの数。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding-ams.html) | 
| Aurora\_fwd\_replica\_open\_sessions | カウント | リーダー DB インスタンスで書き込み転送を使用しているセッションの数。 | 
| Aurora\_fwd\_replica\_read\_wait\_count | カウント | このリーダー DB インスタンスでの書き込み後の読み取り待機の合計数。 | 
| Aurora\_fwd\_replica\_read\_wait\_duration | マイクロ秒 | このリーダー DB インスタンスの読み取り整合性設定による待機時間の合計。 | 
| Aurora\_fwd\_replica\_select\_stmt\_count | カウント | このリーダー DB インスタンスから転送された SELECT ステートメントの合計数。 | 
| Aurora\_fwd\_replica\_select\_stmt\_duration | マイクロ秒 | このリーダー DB インスタンスから転送された SELECT ステートメントの合計期間。 | 