

# Aurora PostgreSQL グローバルデータベースで書き込み転送を使用する
<a name="aurora-global-database-write-forwarding-apg"></a>

**Topics**
+ [Aurora PostgreSQL での書き込み転送を利用できるリージョンとバージョン](#aurora-global-database-write-forwarding-regions-versions-apg)
+ [Aurora PostgreSQL での書き込み転送の有効化](#aurora-global-database-write-forwarding-enabling-apg)
+ [セカンダリクラスターで Aurora PostgreSQL での書き込み転送が有効になっているかどうかの確認](#aurora-global-database-write-forwarding-describing-apg)
+ [書き込み転送とアプリケーションおよび Aurora PostgreSQL の互換性](#aurora-global-database-write-forwarding-compatibility-apg)
+ [Aurora PostgreSQL での書き込み転送の分離と整合性](#aurora-global-database-write-forwarding-isolation-apg)
+ [書き込み転送によるトランザクションアクセスモード](#aurora-global-database-write-forwarding-txns)
+ [Aurora PostgreSQL での書き込み転送を使用したマルチパートステートメントの実行](#aurora-global-database-write-forwarding-multipart-apg)
+ [Aurora PostgreSQL での書き込み転送の設定パラメータ](#aurora-global-database-write-forwarding-params-apg)
+ [Aurora PostgreSQL での書き込み転送の Amazon CloudWatch メトリクス](#aurora-global-database-write-forwarding-cloudwatch-apg)
+ [Aurora PostgreSQL での書き込み転送のイベントを待機する](#aurora-global-database-write-forwarding-wait-events-apg)

## Aurora PostgreSQL での書き込み転送を利用できるリージョンとバージョン
<a name="aurora-global-database-write-forwarding-regions-versions-apg"></a>

 Aurora PostgreSQL バージョン 16 以降のメジャーバージョンでは、グローバル書き込み転送がすべてのマイナーバージョンでサポートされています。Aurora PostgreSQL の以前のバージョンの場合、グローバル書き込み転送は、バージョン 15.4 以降のマイナーバージョンと、バージョン 14.9 以降のマイナーバージョンでサポートされます。書き込み転送は、Aurora PostgreSQL ベースのグローバルデータベースが利用可能なすべての AWS リージョンで利用できます。

Aurora PostgreSQL グローバルデータベースで利用できるバージョンとリージョンについては、「[Aurora PostgreSQL を使用した Aurora グローバルデータベース](Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.md#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.apg)」を参照してください。

## Aurora PostgreSQL での書き込み転送の有効化
<a name="aurora-global-database-write-forwarding-enabling-apg"></a>

デフォルトでは、セカンダリクラスターを Aurora Global Database に追加すると、書き込み転送は有効になりません。セカンダリ DB クラスターの書き込み転送は、作成中または作成後にいつでも有効にできます。必要に応じて、後で無効にすることができます。書き込み転送を有効または無効にしても、ダウンタイムや再起動は発生しません。

**注記**  
ローカル書き込み転送は、アプリケーションで時折書き込みが発生し、書き込み後の読み取りの一貫性 (トランザクション内の最新の書き込みを読み取る機能) を必要とする場合に使用できます。

### コンソール
<a name="aurora-global-database-write-forwarding-enabling-apg.Console"></a>

コンソールでは、セカンダリ DB クラスターを作成または変更するときに、書き込み転送を有効または無効にすることができます。

#### セカンダリ DB クラスターの作成時に書き込み転送を有効または無効にする
<a name="aurora-global-database-write-forwarding-enabling-apg.Console.Creating"></a>

新しいセカンダリ DB クラスターを作成するときは、**[リードレプリカの書き込み転送]** の **[グローバル書き込み転送を有効にする]** チェックボックスをオンにして、書き込み転送を有効にします。または、チェックボックスをオフにしてこの機能を無効にします。セカンダリ DB クラスターを作成するには、「[Amazon Aurora DB クラスターの作成](Aurora.CreateInstance.md)」の DB エンジンの手順に従ってください。

次のスクリーンショットは、**[グローバル書き込み転送を有効にする]** チェックボックスがオンになっている**[リードレプリカの書き込み転送]** セクションを示しています。

![\[\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-db-enable-write-forwarding.png)


#### セカンダリ DB クラスターの修正時に書き込み転送を有効または無効にする
<a name="aurora-global-database-write-forwarding-enabling-apg.Console.Modifying"></a>

コンソールでは、セカンダリ DB クラスターを修正して書き込み転送を有効または無効にすることができます。

**コンソールでセカンダリ DB クラスターの書き込み転送を有効または無効にするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. [**データベース**] をクリックします。

1. セカンダリ DB クラスターを選択し、**[変更]** を選択します。

1. **[リードレプリカの書き込み転送]** セクションで、**[グローバル書き込み転送を有効にする]** チェックボックスをオンまたはオフにします。

1. [**続行**] をクリックしてください。

1. **[変更をスケジュール]** で、**[すぐに適用]** を選択します。次に **[スケジュールされたメンテナンスウィンドウで適用]** を選択すると、Aurora ではこの設定が無視され、書き込み転送が直ちにオンになります。

1. **[クラスターを変更]** を選択します。

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

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

以下の手順では、AWS CLI を使用してグローバルクラスター内のセカンダリ DB クラスターの書き込み転送を有効または無効にする方法について説明します。

**既存のセカンダリ DB クラスターの書き込み転送を有効または無効にするには**
+ [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) AWS CLI コマンドを呼び出して以下の値を指定します。
  + `--db-cluster-identifier` - DB クラスターの名前。
  + オンにする場合は `--enable-global-write-forwarding`、オフにする場合は `--no-enable-global-write-forwarding`。

  次の例では、DB クラスター `sample-secondary-db-cluster` の書き込み転送を有効にします。

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-cluster \
      --db-cluster-identifier sample-secondary-db-cluster \
      --enable-global-write-forwarding
  ```

  Windows の場合:

  ```
  aws rds modify-db-cluster ^
      --db-cluster-identifier sample-secondary-db-cluster ^
      --enable-global-write-forwarding
  ```

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

 Amazon RDS API を使用して書き込み転送を有効にするには、`EnableGlobalWriteForwarding` パラメータを `true` に設定します。このパラメータは、[CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) オペレーションを使用して新しいセカンダリクラスターを作成するときに機能します。この操作は、[ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) オペレーションを使用して既存のセカンダリクラスターを変更する場合にも機能します。グローバルデータベースでは、書き込み転送をサポートする Aurora バージョンを使用する必要があります。`EnableGlobalWriteForwarding` パラメータを `false` に設定することで、書き込み転送をオフにすることができます。

## セカンダリクラスターで Aurora PostgreSQL での書き込み転送が有効になっているかどうかの確認
<a name="aurora-global-database-write-forwarding-describing-apg"></a>

 セカンダリクラスターからの書き込み転送を使用できるかどうかを判断するには、クラスターに属性 `"GlobalWriteForwardingStatus": "enabled"` があるかどうかを確認します。

 AWS マネジメントコンソール では、クラスターの詳細ページの [**設定**] タブに `Read replica write forwarding` が表示されます。すべてのクラスターのグローバル書き込み転送設定のステータスを表示するには、次の 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 PostgreSQL の互換性
<a name="aurora-global-database-write-forwarding-compatibility-apg"></a>

 特定のステートメントは、書き込み転送機能を持つグローバルデータベースで使用すると、許可されないか、または古い結果を生成する可能性があります。また、ユーザー定義関数とユーザー定義プロシージャはサポートされていません。したがって、セカンダリクラスターで `EnableGlobalWriteForwarding` の設定はデフォルトではオフになっています。オンにする前に、アプリケーションコードがこれらの制限の影響を受けていないことを確認してください。

 書き込み転送では、次の種類の SQL ステートメントを使用できます。
+  `INSERT`、`DELETE`、および `UPDATE` などのデータ操作言語 (DML) ステートメント。
+  `SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }` ステートメント
+  `PREPARE` と `EXECUTE` ステートメント
+  このリストにあるステートメントを含む `EXPLAIN` ステートメント

 書き込み転送では、次の種類の SQL ステートメントはサポートされていません。
+  データ定義言語 (DDL) ステートメント 
+  `ANALYZE` 
+  `CLUSTER` 
+  `COPY` 
+ カーソル — カーソルはサポートされていないため、書き込み転送を使用する前に必ずカーソルを閉じてください。
+  `GRANT`\$1`REVOKE`\$1`REASSIGN OWNED`\$1`SECURITY LABEL`
+  `LOCK` 
+  `SAVEPOINT` ステートメント 
+  `SELECT INTO` 
+  `SET CONSTRAINTS` 
+  `TRUNCATE` 
+  `VACUUM` 

## Aurora PostgreSQL での書き込み転送の分離と整合性
<a name="aurora-global-database-write-forwarding-isolation-apg"></a>

 書き込み転送を使用するセッションでは、`REPEATABLE READ` および `READ COMMITTED` 分離レベルのみを使用できます。ただし、`SERIALIZABLE` 分離レベルはサポートされていません。

セカンダリクラスターの読み取り整合性の程度を制御できます。読み取り整合性レベルは、一部またはすべての変更がプライマリクラスターからレプリケートされるように、各読み取りオペレーションの前にセカンダリクラスターが実行する待機時間を決定します。読み取り整合性レベルを調整して、セッションから転送されたすべての書き込みオペレーションが、後続のクエリの前にセカンダリクラスターに表示されるようにすることができます。また、この設定を使用して、セカンダリクラスターのクエリに、常にプライマリクラスターからの最新の更新が表示されるようにすることもできます。これは、他のセッションまたは他のクラスターによって送信されたものであっても同様です。この種類の動作をアプリケーションで指定するには、`apg_write_forward.consistency_mode` パラメータのパラメータの適切な値を選択します。`apg_write_forward.consistency_mode` パラメータは、書き込み転送が有効になっているセカンダリクラスターでのみ有効です。

**注記**  
`apg_write_forward.consistency_mode` パラメータには、`SESSION`、`EVENTUAL`、`GLOBAL` および `OFF` の値を指定できます。デフォルトでは、値は `SESSION` に設定されます。値を `OFF` に設定すると、セッションでの書き込み転送が無効になります。

 整合性レベルを上げると、アプリケーションは、AWS リージョン間で変更が反映されるのを待つ時間が長くなります。応答時間の短縮と、クエリを実行する前に他の場所で行われた変更が完全に使用可能であることのバランスを選択できます。

整合性モードを設定できるたびに、次のような効果が得られます。
+ `SESSION` – 書き込み転送を使用するセカンダリ AWS リージョンのすべてのクエリに、そのセッションで行われたすべての変更の結果が表示されます。トランザクションがコミットされているかどうかにかかわらず、変更が表示されます。必要に応じて、クエリは、転送された書き込みオペレーションの結果が現在のリージョンにレプリケートされるまで待っています。他のリージョンまたは現在のリージョン内の他のセッションで実行された書き込みオペレーションの結果が更新されるのを待つことはありません。
+ `EVENTUAL` - 書き込み転送を使用するセカンダリ AWS リージョンのクエリでは、レプリケーションの遅延によりデータがわずかに古くなることがあります。同じセッションでの書き込みオペレーションの結果は、プライマリリージョンで書き込みオペレーションが実行され、現在のリージョンにレプリケートされるまで表示されません。クエリは、更新された結果が使用可能になるのを待つことはありません。したがって、ステートメントのタイミングとレプリケーションの遅延の量に応じて、古いデータや更新されたデータが取得される可能性があります。
+ `GLOBAL` — セカンダリ AWS リージョンのセッションには、そのセッションによって行われた変更が表示されます。また、プライマリ AWS リージョンと他のセカンダリ AWS リージョンの両方のコミットされた変更もすべて表示されます。各クエリは、セッション遅延の量に応じて変化する期間を待つことがあります。クエリは、クエリがスタートされた時点の、プライマリクラスターからコミットされたすべてのデータでセカンダリクラスターが最新の状態になったときに実行されます。
+ `OFF` — セッションで書き込み転送が無効です。

 書き込み転送に関連するすべてのパラメータの詳細については、「[Aurora PostgreSQL での書き込み転送の設定パラメータ](#aurora-global-database-write-forwarding-params-apg)」を参照してください。

## 書き込み転送によるトランザクションアクセスモード
<a name="aurora-global-database-write-forwarding-txns"></a>

トランザクションアクセスモードが読み取り専用に設定されている場合、書き込み転送は使用されません。書き込み転送が有効になっている DB クラスターおよびセッションに接続している場合にのみ、アクセスモードを読み取り/書き込みに設定できます。

トランザクションアクセスモードの詳細については、「[SET TRANSACTION](https://www.postgresql.org/docs/current/sql-set-transaction.html)」を参照してください。

## Aurora PostgreSQL での書き込み転送を使用したマルチパートステートメントの実行
<a name="aurora-global-database-write-forwarding-multipart-apg"></a>

 DML ステートメントは、`INSERT ... SELECT` ステートメントや `DELETE ... WHERE` ステートメントなど、複数の部分から構成される場合があります。この場合、ステートメント全体がプライマリクラスターに転送され、そこで実行されます。

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

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


|  名前  |  スコープ  |  タイプ  |  デフォルト値  |  有効値  | 
| --- | --- | --- | --- | --- | 
|  apg\$1write\$1forward.connect\$1timeout  |  Session  |  秒  |  30  |  0-2147483647  | 
|  apg\$1write\$1forward.consistency\$1mode |  セッション  |  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` パラメータは、リーダーから転送されたクエリを処理するために使用できるデータベース接続スロットの上限です。これは、プライマリクラスター内の書き込み DB インスタンスの `max_connections` 設定のパーセンテージで表されます。例えば、`max_connections` が `800`、`apg_write_forward.max_forwarding_connections_percent` が `10` の場合、書き込みは最大 80 の同時転送セッションを許可します。これらの接続は、`max_connections` 設定によって管理される同じ接続プールから取得されます。この設定は、セカンダリクラスターで少なくとの 1 つの書き込み転送が有効になっている場合に、プライマリクラスターにのみ適用されます。

セカンダリクラスターでは以下の設定を使用します。
+ `apg_write_forward.consistency_mode` — セカンダリクラスターの読み取り整合性の程度を制御するセッションレベルのパラメータ。有効な値は `SESSION`、`EVENTUAL`、`GLOBAL`、または `OFF` です。デフォルトでは、値は `SESSION` に設定されます。値を `OFF` に設定すると、セッションでの書き込み転送が無効になります。整合性レベルの詳細については、[Aurora PostgreSQL での書き込み転送の分離と整合性](#aurora-global-database-write-forwarding-isolation-apg) を参照してください。このパラメータは、書き込み転送が有効で、Aurora Global Database 内にあるセカンダリクラスターのリーダーインスタンスでのみ関係します。
+ `apg_write_forward.connect_timeout` — セカンダリクラスターがプライマリクラスターへの接続を確立するまでに待機する最大秒数。値が `0` の場合、無期限に待機することになります。
+ `apg_write_forward.idle_in_transaction_session_timeout` – プライマリクラスターが開いているセッションのあるセカンダリクラスターから転送された接続でそれを閉じるまでアクティビティで待機するミリ秒数。トランザクションでこの期間を超えてセッションがアイドル状態のままである場合、Aurora はセッションを終了します。`0` の値は、タイムアウトを無効にします。
+ `apg_write_forward.idle_session_timeout` - プライマリクラスターがセカンダリクラスターから転送された接続でアクティビティを終了するまで待機するミリ秒数。この期間を超えてセッションがアイドル状態のままである場合、Aurora はセッションを終了します。`0` の値は、タイムアウトを無効にします。

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

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


| CloudWatch メトリクス | 単位と説明 | 
| --- | --- | 
| `AuroraForwardingWriterDMLThroughput`  | 1 秒あたりのカウント数。この書き込み DB インスタンスによって 1 秒間に処理される、転送された DML ステートメントの数。 | 
|  `AuroraForwardingWriterOpenSessions`  | カウント。転送されたクエリを処理しているこのライター DB インスタンスで開いているセッションの数。 | 
|  `AuroraForwardingWriterTotalSessions`  | カウント。このライター DB インスタンスで転送されたセッションの合計数。 | 

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


| CloudWatch メトリクス | 単位と説明 | 
| --- | --- | 
|  `AuroraForwardingReplicaCommitThroughput` |  1 秒あたりのカウント数。このレプリカが 1 秒あたりに転送したセッションのコミット数。 | 
|  `AuroraForwardingReplicaDMLLatency` |  ミリ秒。レプリカ上で転送された DML の平均応答時間 (ミリ秒)。 | 
|  `AuroraForwardingReplicaDMLThroughput` |  1 秒あたりのカウント数。このレプリカで 1 秒あたりに処理された転送 DML ステートメントの数。 | 
|  `AuroraForwardingReplicaErrorSessionsLimit` |  カウント。最大接続または最大書き込み転送接続の制限に達したためにプライマリクラスターが拒否したセッションの数。 | 
|  `AuroraForwardingReplicaOpenSessions`  |  カウント。リーダー DB インスタンスで書き込み転送を使用しているセッションの数。 | 
|  `AuroraForwardingReplicaReadWaitLatency` | ミリ秒。レプリカがプライマリクラスターの LSN と一致するまで待機する平均待機時間 (ミリ秒単位)。リーダー DB インスタンスが待機する程度は、apg\$1write\$1forward.consistency\$1mode 設定によって異なります。この設定についての情報は、「[Aurora PostgreSQL での書き込み転送の設定パラメータ](#aurora-global-database-write-forwarding-params-apg)」を参照してください。 | 

## Aurora PostgreSQL での書き込み転送のイベントを待機する
<a name="aurora-global-database-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` イベントは、セカンダリ DB クラスターのバックエンドプロセスが、プライマリ DB クラスターのライターノードへの接続が開かれるのを待っているときに発生します。

**待機時間が増加する原因の可能性**

このイベントは、セカンダリージョンのリーダーノードからプライマリ DB クラスターのライターノードへの接続試行回数が増えるにつれて増加します。

**アクション**

セカンダリノードからプライマリリージョンのライターノードへの同時接続数を減らします。

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

`IPC:AuroraWriteForwardConsistencyPoint` イベントは、転送された書き込みオペレーションの結果が現在のリージョンにレプリケートされるまでセカンダリ DB クラスターのノードからのクエリが待機する時間を記述します。このイベントは、セッションレベルのパラメータ `apg_write_forward.consistency_mode` が次のいずれかに設定されている場合にのみ生成されます。
+ `SESSION` — セカンダリノードのクエリは、そのセッションで行われたすべての変更の結果が終わるまで待機します。
+ `GLOBAL` — セカンダリノード上のクエリは、そのセッションで行われた変更の結果に加えて、グローバルクラスター内のプライマリリージョンと他のセカンダリリージョンの両方でコミットされたすべての変更の結果を待ちます。

`apg_write_forward.consistency_mode` パラメータの設定の詳細については、「[Aurora PostgreSQL での書き込み転送の設定パラメータ](#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` イベントは、セカンダリ DB クラスターのバックエンドプロセスが、転送されたクエリを完了し、プライマリ DB クラスターのライターノードからの結果を取得するのを待っているときに発生します。

**待機時間が増加する原因の可能性**

待機時間の増加の一般的な原因としては、以下が挙げられます。
+ プライマリリージョンのライターノードから多数の行をフェッチしている。
+ セカンダリノードとプライマリリージョンのライターノード間のネットワークレイテンシーが長くなると、セカンダリノードがライターノードからデータを受信するまでにかかる時間が長くなります。
+ セカンダリノードの負荷が増加すると、セカンダリノードからプライマリリージョンのライターノードへのクエリリクエストの送信が遅れる可能性があります。
+ プライマリリージョンのライターノードの負荷が増加すると、ライターノードからセカンダリノードへのデータの送信が遅れる可能性があります。

**アクション**

待機イベントの原因に応じたさまざまなアクションをお勧めします。
+ 必要なデータのみを取得するようにクエリを最適化します。
+ データ操作言語 (DML) オペレーションを最適化し、必要なデータのみを変更します。
+ セカンダリノードまたはプライマリリージョンのライターノードが CPU またはネットワーク帯域幅によって制約されている場合は、CPU キャパシティまたはネットワーク帯域幅の大きいインスタンスタイプに変更することを検討してください。

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

`IPC:AuroraWriteForwardGetGlobalConsistencyPoint` イベントは、GLOBAL 整合性モードを使用しているセカンダリ DB クラスター上のバックエンドプロセスが、クエリを実行する前に、ライターノードからグローバル整合性ポイントを取得するのを待っているときに発生します。

**待機時間が増加する原因の可能性**

待機時間の増加の一般的な原因としては、以下が挙げられます。
+ セカンダリノードとプライマリリージョンのライターノード間のネットワークレイテンシーが長くなると、セカンダリノードがライターノードからデータを受信するまでにかかる時間が長くなります。
+ セカンダリノードの負荷が増加すると、セカンダリノードからプライマリリージョンのライターノードへのクエリリクエストの送信が遅れる可能性があります。
+ プライマリリージョンのライターノードの負荷が増加すると、ライターノードからセカンダリノードへのデータの送信が遅れる可能性があります。

**アクション**

待機イベントの原因に応じたさまざまなアクションをお勧めします。
+ アプリケーションの要件に応じて、整合性モードを変更します。
+ セカンダリノードまたはプライマリリージョンのライターノードが CPU またはネットワーク帯域幅によって制約されている場合は、CPU キャパシティまたはネットワーク帯域幅の大きいインスタンスタイプに変更することを検討してください。

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

`IPC:AuroraWriteForwardXactAbort` イベントは、セカンダリ DB クラスターのバックエンドプロセスがリモートクリーンアップクエリの結果を待っているときに発生します。クリーンアップクエリは、書き込み転送されたトランザクションが中止された後にプロセスを適切な状態に戻すために発行されます。Amazon Aurora は、エラーが見つかったか、ユーザーが明示的な `ABORT` コマンドを発行したか、実行中のクエリをキャンセルしたためにそれらを実行します。

**待機時間が増加する原因の可能性**

待機時間の増加の一般的な原因としては、以下が挙げられます。
+ セカンダリノードとプライマリリージョンのライターノード間のネットワークレイテンシーが長くなると、セカンダリノードがライターノードからデータを受信するまでにかかる時間が長くなります。
+ セカンダリノードの負荷が増加すると、セカンダリノードからプライマリリージョンのライターノードへのクリーンナップクエリリクエストの送信が遅れる可能性があります。
+ プライマリリージョンのライターノードの負荷が増加すると、ライターノードからセカンダリノードへのデータの送信が遅れる可能性があります。

**アクション**

待機イベントの原因に応じたさまざまなアクションをお勧めします。
+ 中断されたトランザクションの原因を調査します。
+ セカンダリノードまたはプライマリリージョンのライターノードが CPU またはネットワーク帯域幅によって制約されている場合は、CPU キャパシティまたはネットワーク帯域幅の大きいインスタンスタイプに変更することを検討してください。

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

`IPC:AuroraWriteForwardXactCommit` イベントは、セカンダリ DB クラスターのバックエンドプロセスが、転送されたコミットトランザクションコマンドの結果を待っているときに発生します。

**待機時間が増加する原因の可能性**

待機時間の増加の一般的な原因としては、以下が挙げられます。
+ セカンダリノードとプライマリリージョンのライターノード間のネットワークレイテンシーが長くなると、セカンダリノードがライターノードからデータを受信するまでにかかる時間が長くなります。
+ セカンダリノードの負荷が増加すると、セカンダリノードからプライマリリージョンのライターノードへのクエリリクエストの送信が遅れる可能性があります。
+ プライマリリージョンのライターノードの負荷が増加すると、ライターノードからセカンダリノードへのデータの送信が遅れる可能性があります。

**アクション**

セカンダリノードまたはプライマリリージョンのライターノードが CPU またはネットワーク帯域幅によって制約されている場合は、CPU キャパシティまたはネットワーク帯域幅の大きいインスタンスタイプに変更することを検討してください。

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

`IPC:AuroraWriteForwardXactStart` イベントは、セカンダリ DB クラスターのバックエンドプロセスが、転送された開始トランザクションコマンドの結果を待っているときに発生します。

**待機時間が増加する原因の可能性**

待機時間の増加の一般的な原因としては、以下が挙げられます。
+ セカンダリノードとプライマリリージョンのライターノード間のネットワークレイテンシーが長くなると、セカンダリノードがライターノードからデータを受信するまでにかかる時間が長くなります。
+ セカンダリノードの負荷が増加すると、セカンダリノードからプライマリリージョンのライターノードへのクエリリクエストの送信が遅れる可能性があります。
+ プライマリリージョンのライターノードの負荷が増加すると、ライターノードからセカンダリノードへのデータの送信が遅れる可能性があります。

**アクション**

セカンダリノードまたはプライマリリージョンのライターノードが CPU またはネットワーク帯域幅によって制約されている場合は、CPU キャパシティまたはネットワーク帯域幅の大きいインスタンスタイプに変更することを検討してください。