Client:ClientWrite
当 RDS for PostgreSQL 等待将数据写入客户端时,会发生 Client:ClientWrite
事件。
支持的引擎版本
RDS for PostgreSQL 版本 10 及更高版本支持此等待事件信息。
上下文
客户端进程必须先读取从 RDS for PostgreSQL 数据库集群接收的所有数据,然后集群才能发送更多数据。集群在将更多数据发送给客户端之前等待的时间为 Client:ClientWrite
事件。
RDS for PostgreSQL 数据库实例与客户端之间的网络吞吐量降低可能会导致此事件。客户端的 CPU 压力和网络饱和也可能导致此事件。CPU 压力是 CPU 被充分利用并且有任务等待 CPU 时间的时间。网络饱和是当数据库和客户端之间的网络传输的数据超出其处理能力之时。
等待次数增加的可能原因
Client:ClientWrite
显示在主要等待中的常见原因包括以下各项:
- 网络延迟增加
-
RDS for PostgreSQL 数据库实例和客户端之间的网络延迟可能会增加。较高的网络延迟会增加客户端接收数据所需的时间。
- 客户端负载增加
-
客户端上可能存在 CPU 压力或网络饱和。客户端负载的增加会延迟从 RDS for PostgreSQL 数据库实例接收数据的过程。
- 发送到客户端的大量数据
-
RDS for PostgreSQL 数据库实例可能会向客户端发送大量数据。客户端可能无法像集群发送数据那样地快速接收数据。诸如大型表的副本之类的活动可能会导致
Client:ClientWrite
事件增加。
操作
根据等待事件的原因,我们建议采取不同的操作。
将客户端放置在与集群相同的可用区和 VPC 子网中。
为了减少网络延迟并提高网络吞吐量,请将客户端放在与 RDS for PostgreSQL 数据库实例相同的可用区和虚拟私有云(VPC)子网中。
使用当前一代实例
在某些情况下,您可能没有使用支持巨型帧的数据库实例类。如果您在 Amazon EC2 上运行应用程序,请考虑为客户端使用当前一代实例。另外,在客户端操作系统上配置最大传输单位 (MTU)。这种技术可能会减少网络往返次数并提高网络吞吐量。有关更多信息,请参阅《Amazon EC2 用户指南》中的巨型帧(9001 MTU)。
有关数据库实例类的信息,请参阅 数据库实例类。要确定等同于 Amazon EC2 实例类型的数据库实例类,请将 db.
放置在 Amazon EC2 实例类型名称之前。例如,r5.8xlarge
Amazon EC2 实例等同于 db.r5.8xlarge
数据库实例类。
减少发送到客户端的数据量
如果可能,请调整应用程序以减少 RDS for PostgreSQL 数据库实例发送给客户端的数据量。进行这样的调整可以减轻客户端上的 CPU 和网络争用。
扩展客户端
使用 Amazon CloudWatch 或其他主机指标,确定您的客户端当前是受 CPU 或网络带宽的限制,还是受此两者的限制。如果客户端受到限制,请相应地扩展您的客户端。