

# Client:ClientWrite
<a name="wait-event.clientwrite"></a>

当 RDS for PostgreSQL 等待将数据写入客户端时，会发生 `Client:ClientWrite` 事件。

**Topics**
+ [支持的引擎版本](#wait-event.clientwrite.context.supported)
+ [上下文](#wait-event.clientwrite.context)
+ [等待次数增加的可能原因](#wait-event.clientwrite.causes)
+ [操作](#wait-event.clientwrite.actions)

## 支持的引擎版本
<a name="wait-event.clientwrite.context.supported"></a>

RDS for PostgreSQL 版本 10 及更高版本支持此等待事件信息。

## 上下文
<a name="wait-event.clientwrite.context"></a>

客户端进程必须先读取从 RDS for PostgreSQL 数据库集群接收的所有数据，然后集群才能发送更多数据。集群在将更多数据发送给客户端之前等待的时间为 `Client:ClientWrite` 事件。

RDS for PostgreSQL 数据库实例与客户端之间的网络吞吐量降低可能会导致此事件。客户端的 CPU 压力和网络饱和也可能导致此事件。*CPU 压力*是 CPU 被充分利用并且有任务等待 CPU 时间的时间。*网络饱和*是当数据库和客户端之间的网络传输的数据超出其处理能力之时。

## 等待次数增加的可能原因
<a name="wait-event.clientwrite.causes"></a>

`Client:ClientWrite` 显示在主要等待中的常见原因包括以下各项：

**网络延迟增加**  
RDS for PostgreSQL 数据库实例和客户端之间的网络延迟可能会增加。较高的网络延迟会增加客户端接收数据所需的时间。

**客户端负载增加**  
客户端上可能存在 CPU 压力或网络饱和。客户端负载的增加会延迟从 RDS for PostgreSQL 数据库实例接收数据的过程。

**发送到客户端的大量数据**  
RDS for PostgreSQL 数据库实例可能会向客户端发送大量数据。客户端可能无法像集群发送数据那样地快速接收数据。诸如大型表的副本之类的活动可能会导致 `Client:ClientWrite` 事件增加。

## 操作
<a name="wait-event.clientwrite.actions"></a>

根据等待事件的原因，我们建议采取不同的操作。

**Topics**
+ [将客户端放置在与集群相同的可用区和 VPC 子网中。](#wait-event.clientwrite.actions.az-vpc-subnet)
+ [使用当前一代实例](#wait-event.clientwrite.actions.db-instance-class)
+ [减少发送到客户端的数据量](#wait-event.clientwrite.actions.reduce-data)
+ [扩展客户端](#wait-event.clientwrite.actions.scale-client)

### 将客户端放置在与集群相同的可用区和 VPC 子网中。
<a name="wait-event.clientwrite.actions.az-vpc-subnet"></a>

为了减少网络延迟并提高网络吞吐量，请将客户端放在与 RDS for PostgreSQL 数据库实例相同的可用区和虚拟私有云（VPC）子网中。

### 使用当前一代实例
<a name="wait-event.clientwrite.actions.db-instance-class"></a>

在某些情况下，您可能没有使用支持巨型帧的数据库实例类。如果您在 Amazon EC2 上运行应用程序，请考虑为客户端使用当前一代实例。另外，在客户端操作系统上配置最大传输单位 (MTU)。这种技术可能会减少网络往返次数并提高网络吞吐量。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[巨型帧（9001 MTU）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html#jumbo_frame_instances)。

有关数据库实例类的信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。要确定等同于 Amazon EC2 实例类型的数据库实例类，请将 `db.` 放置在 Amazon EC2 实例类型名称之前。例如，`r5.8xlarge` Amazon EC2 实例等同于 `db.r5.8xlarge` 数据库实例类。

### 减少发送到客户端的数据量
<a name="wait-event.clientwrite.actions.reduce-data"></a>

如果可能，请调整应用程序以减少 RDS for PostgreSQL 数据库实例发送给客户端的数据量。进行这样的调整可以减轻客户端上的 CPU 和网络争用。

### 扩展客户端
<a name="wait-event.clientwrite.actions.scale-client"></a>

使用 Amazon CloudWatch 或其他主机指标，确定您的客户端当前是受 CPU 或网络带宽的限制，还是受此两者的限制。如果客户端受到限制，请相应地扩展您的客户端。