

# Aurora PostgreSQL 中的本地写入转发
<a name="aurora-postgresql-write-forwarding"></a>

 *本地（集群内）写入转发*支持您的应用程序直接在 Aurora 副本上发出读/写事务。然后，写入命令转发到写入器数据库实例进行提交。对于偶尔写入且要求*先写后读一致性*（即能够读取事务中的最新写入内容）的应用程序，您可以使用本地写入转发。

 如果没有写入转发，您的应用程序必须完全拆分所有读取和写入流量，保持两组数据库连接才能将流量发送到相应的端点。只读副本从写入器实例异步接收更新。此外，由于不同只读副本的复制滞后可能不同，因此很难在所有副本之间实现全局读取一致性。必须在写入器数据库实例上处理任何要求先写后读一致性的读取。或者，您需要开发复杂的自定义应用程序逻辑，以利用多个只读副本在确保一致性的同时实现可扩展性。

 借助写入转发，您无需拆分这些事务或将它们专门发送到写入器实例。您也不必开发复杂的应用程序逻辑来实现*先写后读一致性*。

 本地写入转发在提供 Aurora PostgreSQL 的每个区域均可用。以下 Aurora PostgreSQL 版本支持该特征：
+ 16.4 及更高的 16 版本
+ 15.8 及更高的 15 版本
+ 14.13 及更高的 14 版本

 本地写入转发用于转发来自区域内副本的写入。要转发来自全局副本的写入，请参阅 [在 Amazon Aurora Global Database 中使用写入转发](aurora-global-database-write-forwarding.md)。

**Topics**
+ [

# Aurora PostgreSQL 中的本地写入转发的限制和注意事项
](aurora-postgresql-write-forwarding-limitations.md)
+ [

# 配置 Aurora PostgreSQL 以进行本地写入转发
](aurora-postgresql-write-forwarding-configuring.md)
+ [

# 在 Aurora PostgreSQL 中使用本地写入转发
](aurora-postgresql-write-forwarding-understanding.md)
+ [

# 监控 Aurora PostgreSQL 中的本地写入转发
](aurora-postgresql-write-forwarding-monitoring.md)

# Aurora PostgreSQL 中的本地写入转发的限制和注意事项
<a name="aurora-postgresql-write-forwarding-limitations"></a>

 目前，Aurora PostgreSQL 中的本地写入转发有以下限制：
+  RDS 代理不支持本地写入转发。
+  在具有写入转发功能的 Aurora PostgreSQL 中不允许使用某些语句，否则可能产生过时的结果。此外，不支持用户定义的函数和用户定义的过程。因此，默认情况下，数据库集群的 `EnableLocalWriteForwarding` 设置处于关闭状态。在启用它之前，请检查以确保您的应用程序代码不受任何这些限制的影响。
+  写入转发不支持以下类型的 SQL 语句：
**注意**  
这些语句可以由您在应用程序中隐式使用，也可以由 PostgreSQL 协议推断出来。例如，PL/SQL 异常处理可能会导致使用 SAVEPOINT，但该语句不受支持。
  +  `ANALYZE` 
  +  `CLUSTER` 
  +  `COPY` 
  + 游标 - 不支持游标，因此在使用本地写入转发之前，请务必将其关闭。
  +  数据定义语言（DDL）语句 
  +  `GRANT`\$1`REVOKE`\$1`REASSIGN OWNED`\$1`SECURITY LABEL`
  +  `LISTEN / NOTIFY` 
  +  `LOCK` 
  +  `SAVEPOINT` 
  +  `SELECT INTO` 
  +  `SET CONSTRAINTS` 
  +  序列更新：`nextval()`、`setval()`
  +  `TRUNCATE` 
  +  两阶段提交命令：`PREPARE TRANSACTION`、`COMMIT PREPARED`、`ROLLBACK PREPARED`
  + 用户定义的函数和用户定义的过程。
  +  `VACUUM` 

 您可以考虑将以下 SQL 语句与写入转发一起使用：
+ DML 语句可能由多个部分组成，如 `INSERT ... SELECT` 语句或 `DELETE ... WHERE` 语句。在这种情况下，整个语句将转发到写入器数据库实例并在此处运行。
+ 数据操作语言 (DML) 语句，如 `INSERT`、`DELETE` 和 `UPDATE`。
+  `EXPLAIN` 语句和此列表中的语句。
+  `PREPARE` 和 `EXECUTE` 语句。
+  `SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE }` 语句。

# 配置 Aurora PostgreSQL 以进行本地写入转发
<a name="aurora-postgresql-write-forwarding-configuring"></a>

 使用以下部分，您可以为 Amazon Aurora PostgreSQL 数据库集群启用本地写入转发，配置一致性级别以及使用写入转发来管理事务。

## 启用本地写入转发
<a name="aurora-postgresql-write-forwarding-enabling"></a>

 默认情况下，Aurora PostgreSQL 数据库集群不启用本地写入转发。您在集群级别而不是在实例级别启用本地写入转发。

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

 使用 Amazon Web Services 管理控制台，在创建或修改数据库集群时，选中**只读副本写入转发**下的**开启本地写入转发**复选框。

### Amazon CLI
<a name="aurora-postgresql-write-forwarding-enabling.CLI"></a>

 要使用 Amazon CLI 启用本地写入转发，请使用 `--enable-local-write-forwarding` 选项。当您使用 `create-db-cluster` 命令创建新的数据库集群时，此选项将起作用。当您使用 `modify-db-cluster` 命令修改现有数据库集群时，它也起作用。您可以结合这些相同的 CLI 命令使用 `--no-enable-local-write-forwarding` 选项来禁用本地写入转发。

 以下示例创建了一个启用本地写入转发的 Aurora PostgreSQL 数据库集群。

```
                        aws rds create-db-cluster \
                        --db-cluster-identifier write-forwarding-test-cluster \
                        --enable-local-write-forwarding \
                        --engine aurora-postgresql \
                        --engine-version 16.4 \
                        --master-username myuser \
                        --master-user-password mypassword \
                        --backup-retention 1
```

 然后，您可以创建写入器和读取器数据库实例，以便您可以使用写入转发。有关更多信息，请参阅 [创建 Amazon Aurora 数据库集群](Aurora.CreateInstance.md)。

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

 要使用 Amazon RDS API 启用本地写入转发，请将 `EnableLocalWriteForwarding` 参数设置为 `true`。当您使用 `CreateDBCluster` 操作创建新的数据库集群时，此参数起作用。当您使用 `ModifyDBCluster` 操作修改现有数据库集群时，它也起作用。您可以通过将 `EnableLocalWriteForwarding` 参数设置为 `false` 来禁用本地写入转发。

### 为数据库会话启用本地写入转发
<a name="aurora-postgresql-write-forwarding-enabling-session"></a>

 `apg_write_forward.consistency_mode` 参数是启用写入转发的数据库参数和数据库集群参数。您可以为读取一致性级别指定 `SESSION`、`EVENTUAL`、`GLOBAL` 或 `OFF`。要了解有关一致性级别的更多信息，请参阅[Aurora PostgreSQL 中本地写入转发的一致性和隔离](#aurora-postgresql-write-forwarding-isolation)。

 以下规则适用于此参数：
+ 默认值为 `SESSION`。
+  仅当您将 `apg_write_forward.consistency_mode` 设置为 `EVENTUAL`、`SESSION` 或 `GLOBAL` 时，本地写入转发才可用。此参数仅适用于启用了本地写入转发的数据库集群的读取器实例。
+ 将该值设置为 `OFF` 将在会话中禁用本地写入转发。

## Aurora PostgreSQL 中本地写入转发的一致性和隔离
<a name="aurora-postgresql-write-forwarding-isolation"></a>

您可以控制只读副本上的读取一致性程度。您可以调整读取一致性级别，以确保会话中的所有转发的写入操作在只读副本中均可见，然后再进行任何后续查询。您还可以使用此设置来确保只读副本上的查询始终看到来自写入器数据库实例的最新更新。即使是由其他会话或其他集群提交的更新。要为应用程序指定此类行为，请为会话级别参数 `apg_write_forward.consistency_mode` 选择一个合适的值。`apg_write_forward.consistency_mode` 参数仅对启用了本地写入转发的只读副本产生影响。

**注意**  
对于 `apg_write_forward.consistency_mode` 参数，您可以指定值 `SESSION`、`EVENTUAL`、`GLOBAL` 和 `OFF`。默认情况下， 值设为 `SESSION`。将该值设置为 `OFF` 将禁用写入转发。

随着您提高一致性级别，您的应用程序会花更多时间等待更改传播到只读副本。您可以选择在较低延迟与确保运行查询之前在其他位置进行的更改完全可用之间取得平衡。

对于每种可用的一致性模式设置，效果如下所示：
+ `SESSION` – 只读副本上使用本地写入转发的会话会看到在该会话中所做的所有更改的结果。无论事务是否已提交，这些更改都是可见的。如有必要，查询将等待转发的写入操作的结果复制到当前读取器数据库实例。它不会等待在当前数据库集群内的其他会话中执行的写入操作的更新结果。
+ `EVENTUAL` – 只读副本上使用本地写入转发的查询可能会看到由于复制滞后而稍微过时的数据。在对写入器数据库实例执行写入操作并将其复制到只读副本之前，看不到同一会话中写入操作的结果。查询不会等待更新的结果可用。因此，它可能会检索较旧的数据或更新的数据，具体取决于语句的时间和复制滞后量。
+ `GLOBAL` – 只读副本上的会话会看到该会话所做的更改。它还可以查看来自写入器数据库实例和其他只读副本的所有已提交的更改。每个查询可能会等待一段时间，该时间取决于会话滞后量。从查询开始时，如果只读副本处于最新状态（具有来自写入器数据库实例的所有已提交数据），查询将继续进行。
**注意**  
全局一致性模式会影响会话中执行的查询的延迟。即使会话未发送任何写入查询，它也会执行等待。
+ `OFF` – 本地写入转发已禁用。

在使用写入转发的会话中，您可以使用 `REPEATABLE READ` 和 `READ COMMITTED` 隔离级别。但是，不支持 `SERIALIZABLE` 隔离级别。

 有关写入转发涉及的所有参数的更多信息，请参阅 [写入转发的默认参数设置](aurora-postgresql-write-forwarding-understanding.md#aurora-postgresql-write-forwarding-params)。

## 具有写入转发的事务访问模式
<a name="aurora-postgresql-write-forwarding-txns"></a>

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

有关事务访问模式的更多信息，请参阅 [SET TRANSACTION](https://www.postgresql.org/docs/current/sql-set-transaction.html)。

# 在 Aurora PostgreSQL 中使用本地写入转发
<a name="aurora-postgresql-write-forwarding-understanding"></a>

使用以下部分，您可以检查数据库集群是否启用了本地写入转发，查看兼容性注意事项，并查看可配置参数和身份验证设置。这些信息详细介绍了如何有效利用 Aurora PostgreSQL 中的本地写入转发功能。

**注意**  
当使用本地写入转发的集群中的写入器实例重启时，使用本地写入转发的读取器实例上任何活跃的转发事务和查询都将自动关闭。在写入器实例再次可用后，您可以重试这些事务。

## 检查数据库集群是否启用了本地写入转发
<a name="aurora-postgresql-write-forwarding-describing"></a>

要确定是否可以在数据库集群中使用本地写入转发，请确认该集群的属性 `LocalWriteForwardingStatus` 是否设置为 `enabled`。

在 Amazon Web Services 管理控制台中，在集群详细信息页面的**配置**选项卡上，您可以看到**本地只读副本写入转发**的状态为**已启用**。

要查看所有集群的本地写入转发设置的状态，请运行以下 Amazon 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-postgresql-v2-cluster"
}
]
```

对于 `LocalWriteForwardingStatus`，数据库集群可以具有以下值：
+ `disabled` – 本地写入转发已禁用。
+ `disabling` – 正在禁用本地写入转发。
+ `enabled` – 本地写入转发已启用。
+ `enabling` – 正在启用本地写入转发。
+ `null` – 本地写入转发不适用于此数据库集群。
+ `requested` – 已请求本地写入转发，但尚未激活。

## 写入转发的默认参数设置
<a name="aurora-postgresql-write-forwarding-params"></a>

Aurora 集群参数组包含本地写入转发功能的设置。由于这些是集群参数，因此每个集群中的所有数据库实例对于这些变量具有相同的值。下表汇总了有关这些参数的详细信息，表后附有使用说明。


| 参数 | 范围 | 类型 | 默认值 | 有效值 | 
| --- | --- | --- | --- | --- | 
| apg\$1write\$1forward.connect\$1timeout | 会话 | 秒 | 30 | 0–2147483647 | 
| apg\$1write\$1forward.consistency\$1mode | Session | enum | 会话 | SESSION、EVENTUAL、GLOBAL 和 OFF | 
| apg\$1write\$1forward.idle\$1in\$1transaction\$1session\$1timeout | 会话 | 毫秒 | 86400000 | 0–2147483647 | 
| apg\$1write\$1forward.idle\$1session\$1timeout | 会话 | 毫秒 | 300000 | 0–2147483647 | 
| apg\$1write\$1forward.max\$1forwarding\$1connections\$1percent | 全局 | 整数 | 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-postgresql-write-forwarding-configuring.md#aurora-postgresql-write-forwarding-isolation)。此参数仅适用于启用了本地写入转发的读取器实例。
+ `apg_write_forward.connect_timeout` – 只读副本在与写入器数据库实例建立连接时在放弃之前等待的最大秒数。值 `0` 表示无限期等待。
+ `apg_write_forward.idle_in_transaction_session_timeout` – 写入器数据库实例在关闭从具有未处理事务的只读副本转发的连接之前等待活动的毫秒数。如果在此段时间之后，会话在事务中仍处于空闲状态，则 Aurora 会终止会话。`0` 值禁用超时。
+ `apg_write_forward.idle_session_timeout` – 写入器数据库实例在关闭从只读副本转发的连接之前等待活动的毫秒数。如果会话在这段时间之后仍处于空闲状态，则 Aurora 会终止会话。值 `0` 禁用超时。

## rdswriteforwarduser
<a name="aurora-postgresql-write-forwarding-rdswriteforwarduser"></a>

 `rdswriteforwarduser` 是我们将用于在只读副本和写入器数据库实例之间建立连接的用户。

**注意**  
`rdswriteforwarduser` 通过 PUBLIC 角色继承其对客户数据库的 CONNECT 权限。如果撤销 PUBLIC 角色的权限，则需要为将写入转发到的数据库授予 CONNECT 权限。

# 监控 Aurora PostgreSQL 中的本地写入转发
<a name="aurora-postgresql-write-forwarding-monitoring"></a>

使用以下部分，您可以监控 Aurora PostgreSQL 集群中的本地写入转发（包括相关的 CloudWatch 指标和等待事件），以跟踪性能并识别潜在问题。

## 用于写入转发的 Amazon CloudWatch 指标和 Aurora PostgreSQL 状态变量
<a name="aurora-postgresql-write-forwarding-cloudwatch"></a>

 在一个或多个只读副本上使用写入转发时，以下 Amazon CloudWatch 指标适用于写入器数据库实例。


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

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


| CloudWatch 指标 | 单位和描述 | 
| --- | --- | 
|  `AuroraForwardingReplicaCommitThroughput` |  计数（每秒）。此副本每秒转发的会话中的提交数。 | 
|  `AuroraForwardingReplicaDMLLatency` |  毫秒。副本上转发 DML 的平均响应时间（以毫秒为单位）。 | 
|  `AuroraForwardingReplicaDMLThroughput` |  计数（每秒）。此副本每秒处理的转发 DML 语句数。 | 
|  `AuroraForwardingReplicaErrorSessionsLimit` |  计数。由于达到最大连接数或最大写入转发连接数限制而被写入器数据库实例拒绝的会话数。 | 
|  `AuroraForwardingReplicaOpenSessions`  |  计数。在副本实例上使用本地写入转发的会话数。 | 
|  `AuroraForwardingReplicaReadWaitLatency` | 毫秒。副本等待与写入器数据库实例 LSN 一致的平均等待时间（以毫秒为单位）。读取器数据库实例等待的程度取决于 apg\$1write\$1forward.consistency\$1mode 设置。有关该设置的信息，请参阅 [Aurora PostgreSQL 中写入转发的配置参数](aurora-global-database-write-forwarding-apg.md#aurora-global-database-write-forwarding-params-apg)。 | 

## 在 Aurora PostgreSQL 中使用本地写入转发的等待事件
<a name="aurora-postgresql-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-apg.md#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 容量或更多网络带宽的实例类型。