

# 在 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)
+ [应用程序和 SQL 与 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 时不启用写入转发。您可以在创建辅助数据库集群时或创建后的任何时候为其启用写入转发。如果需要，您可以稍后将其禁用。启用或禁用写入转发不会导致停机或重启。

**注意**  
对于偶尔写入且要求先写后读一致性（即能够读取事务中的最新写入内容）的应用程序，您可以使用本地写入转发。

### 控制台
<a name="aurora-global-database-write-forwarding-enabling-apg.Console"></a>

在控制台中，您可以在创建或修改辅助数据库集群时启用或禁用写入转发。

#### 创建辅助数据库集群时启用或禁用写入转发
<a name="aurora-global-database-write-forwarding-enabling-apg.Console.Creating"></a>

创建新的辅助数据库集群时，您可以通过选中**只读副本写入转发**下方的**开启全局写入转发**复选框来启用写入转发。或者清除复选框即可将其禁用。要创建辅助数据库集群，请按 [创建 Amazon Aurora 数据库集群](Aurora.CreateInstance.md) 中数据库引擎的说明操作。

以下屏幕截图显示已选中**开启全局写入转发**复选框的**只读副本写入转发**部分。

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


#### 修改辅助数据库集群时启用或禁用写入转发
<a name="aurora-global-database-write-forwarding-enabling-apg.Console.Modifying"></a>

在控制台中，您可以修改辅助数据库集群以启用或禁用写入转发。

**使用控制台为辅助数据库集群启用或禁用写入转发**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 选择**数据库**。

1. 选择辅助数据库集群，然后选择**修改**。

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 为全局集群中的辅助数据库集群启用或禁用写入转发。

**为现有辅助数据库集群启用或禁用写入转发**
+ 调用 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) AWS CLI 命令并提供以下值：
  + `--db-cluster-identifier` – 数据库集群的名称。
  + `--enable-global-write-forwarding` 以打开或 `--no-enable-global-write-forwarding` 以关闭。

  以下示例为数据库集群 `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"
    }
]
```

## 应用程序和 SQL 与 Aurora PostgreSQL 中写入转发的兼容性
<a name="aurora-global-database-write-forwarding-compatibility-apg"></a>

 在具有写入转发的全局数据库中使用某些语句时，不允许这些语句或它们可能产生过时的结果。此外，不支持用户定义的函数和用户定义的过程。因此，默认情况下，辅助集群的 `EnableGlobalWriteForwarding` 设置处于关闭状态。在启用它之前，请检查以确保您的应用程序代码不受任何这些限制的影响。

 您可以将以下类型的 SQL 语句与写入转发一起使用：
+  数据操作语言（DML）语句，如 `INSERT`、`DELETE` 和 `UPDATE`。
+  `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>

如果事务访问模式设置为只读，则不使用写入转发。在连接到启用了写入转发的数据库集群和会话时，可以将访问模式设置为只读写。

有关事务访问模式的更多信息，请参阅 [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 集群参数组包含写入转发功能的设置。由于这些是集群参数，因此每个集群中的所有数据库实例对于这些变量具有相同的值。下表汇总了有关这些参数的详细信息，表后附有使用说明。


|  名称  |  范围  |  类型  |  默认值  |  有效值  | 
| --- | --- | --- | --- | --- | 
|  apg\$1write\$1forward.connect\$1timeout  |  Session  |  seconds  |  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-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 指标适用于主集群。这些指标均在主集群中的写入器数据库实例上进行测量。


| CloudWatch 指标 | 单位和描述 | 
| --- | --- | 
| `AuroraForwardingWriterDMLThroughput`  | 计数（每秒）。此写入器数据库实例每秒处理的转发 DML 语句数。 | 
|  `AuroraForwardingWriterOpenSessions`  | 计数。此写入器数据库实例上处理转发查询的打开会话数。 | 
|  `AuroraForwardingWriterTotalSessions`  | 计数。此写入器数据库实例上的转发会话总数。 | 

 以下 CloudWatch 指标适用于每个辅助集群。这些指标在启用写入转发的辅助集群中的每个读取器数据库实例上进行测量。


| CloudWatch 指标 | 单位和描述 | 
| --- | --- | 
|  `AuroraForwardingReplicaCommitThroughput` |  计数（每秒）。此副本每秒转发的会话中的提交数。 | 
|  `AuroraForwardingReplicaDMLLatency` |  毫秒。副本上转发 DML 的平均响应时间（以毫秒为单位）。 | 
|  `AuroraForwardingReplicaDMLThroughput` |  计数（每秒）。此副本每秒处理的转发 DML 语句数。 | 
|  `AuroraForwardingReplicaErrorSessionsLimit` |  计数。由于达到最大连接数或最大写入转发连接数限制而被主集群拒绝的会话数。 | 
|  `AuroraForwardingReplicaOpenSessions`  |  计数。在副本实例上使用写入转发的会话数。 | 
|  `AuroraForwardingReplicaReadWaitLatency` | 毫秒。副本等待与主集群 LSN 一致的平均等待时间（以毫秒为单位）。读取器数据库实例等待的程度取决于 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` 事件。

**等待次数增加的可能原因**

随着尝试从辅助区域读取器节点连接到主数据库集群写入器节点的次数不断增加，此事件也会增加。

**操作**

减少从辅助节点到主区域写入器节点的同时连接数量。

### 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-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>

当使用 GLOBAL 一致性模式的辅助数据库集群上的后端进程在执行查询之前等待从写入器节点获取全局一致性点时，就会发生该 `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>

当辅助数据库集群上的后端进程在等待转发提交事务命令的结果时，就会发生该 `IPC:AuroraWriteForwardXactCommit` 事件。

**等待次数增加的可能原因**

等待次数增加的常见原因包括以下几点：
+ 辅助节点和主区域写入器节点之间的网络延迟增加会增加辅助节点从写入器节点获得数据所花费的时间。
+ 辅助节点的负载增加可能会延迟从辅助节点向主区域写入器节点传输查询请求的时间。
+ 主区域写入器节点负载的增加可能会延迟从写入器节点向辅助节点传输数据的时间。

**操作**

如果辅助节点或主区域写入器节点受到 CPU 或网络带宽的限制，请考虑将其更改为具有更大 CPU 容量或更多网络带宽的实例类型。

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

当辅助数据库集群上的后端进程在等待转发开始事务命令的结果时，就会发生该 `IPC:AuroraWriteForwardXactStart` 事件。

**等待次数增加的可能原因**

等待次数增加的常见原因包括以下几点：
+ 辅助节点和主区域写入器节点之间的网络延迟增加会增加辅助节点从写入器节点获得数据所花费的时间。
+ 辅助节点的负载增加可能会延迟从辅助节点向主区域写入器节点传输查询请求的时间。
+ 主区域写入器节点负载的增加可能会延迟从写入器节点向辅助节点传输数据的时间。

**操作**

如果辅助节点或主区域写入器节点受到 CPU 或网络带宽的限制，请考虑将其更改为具有更大 CPU 容量或更多网络带宽的实例类型。