

# クライアント: ClientWrite
<a name="wait-event.clientwrite"></a>

`Client:ClientWrite` イベントは、RDS for PostgreSQL がクライアントへのデータ書き込みを待っているときに発生します。

**Topics**
+ [サポート対象エンジンバージョン](#wait-event.clientwrite.context.supported)
+ [Context](#wait-event.clientwrite.context)
+ [待機時間が増加する原因の可能性](#wait-event.clientwrite.causes)
+ [アクション](#wait-event.clientwrite.actions)

## サポート対象エンジンバージョン
<a name="wait-event.clientwrite.context.supported"></a>

この待機イベント情報は、RDS for PostgreSQL バージョン 10 以降でサポートされています。

## Context
<a name="wait-event.clientwrite.context"></a>

クライアントプロセスは、クラスターがさらにデータを送信する前に、RDS for PostgreSQL DB クラスターから受信したすべてのデータを読み込む必要があります。クライアントにより多くのデータを送信する前にクラスターが待機する時間は、`Client:ClientWrite`イベントになります。

RDS for PostgreSQL DB インスタンスとクライアント間のネットワークスループットが低下すると、このイベントが発生することがあります。クライアントの CPU プレッシャーとネットワークの飽和により、このイベントが発生することがあります。*CPU プレッシャー*とは、CPU が完全に使用されており、CPU 時間を待っているタスクがあることです。*ネットワーク飽和度*とは、データベースとクライアント間のネットワークが、処理できるデータ以上のデータを伝送しているときです。

## 待機時間が増加する原因の可能性
<a name="wait-event.clientwrite.causes"></a>

`Client:ClientWrite`上位待機中に表示されるイベントの一般的な原因には、次のものがあります。

**ネットワークレイテンシーの増加**  
RDS for PostgreSQL DB インスタンスとクライアントの間のネットワークレイテンシーが増加することがあります。ネットワークレイテンシーが高いほど、クライアントからデータを受信するために必要な時間が長くなります。

**クライアント側への負荷の増加**  
クライアント側で CPU プレッシャーまたはネットワーク飽和が発生している可能性があります。クライアントの負荷が増加すると、RDS for PostgreSQL DB インスタンスからのデータの受信が遅延します。

**クライアントに送信される大量のデータ**  
RDS for PostgreSQL DB インスタンスがクライアントに大量のデータを送信している可能性があります。クライアントは、クラスターのデータ送信と同じ速度ではデータを受信できない場合があります。大きなテーブルのコピーなどのアクティビティは、`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 DB インスタンスと同じアベイラビリティーゾーンおよび仮想プライベートクラウド (VPC) サブネットにクライアントを配置します。

### 現行世代のインスタンスを使用
<a name="wait-event.clientwrite.actions.db-instance-class"></a>

場合によっては、ジャンボフレームをサポートする DB インスタンスクラスを使用していない可能性があります。Amazon EC2 でアプリケーションを実行している場合は、クライアント側に現行世代のインスタンスを使用することを検討してください。また、クライアントのOSで最大送信単位 (MTU) を設定します。この技術では、ネットワークラウンドトリップの数を減らし、ネットワークスループットを向上させることができます。詳細については、「*Amazon EC2 ユーザーガイド*」の「[ジャンボフレーム (9001 MTU)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html#jumbo_frame_instances)」を参照してください。

DB インスタンスクラスの詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。Amazon EC2 インスタンスタイプと同等の DB インスタンスクラスを決定するには、`db.`Amazon EC2 インスタンスタイプの前に配置します。例えば、`r5.8xlarge`Amazon EC2 インスタンスは`db.r5.8xlarge`DB インスタンスクラスと同等です。

### クライアントに送信するデータ量を減らします。
<a name="wait-event.clientwrite.actions.reduce-data"></a>

可能であれば、RDS for PostgreSQL DB インスタンスがクライアントに送信するデータ量を減らすようにアプリケーションを調整します。このような調整を行うと、クライアントの CPU やネットワークの競合を軽減します。

### クライアントのスケーリング
<a name="wait-event.clientwrite.actions.scale-client"></a>

Amazon CloudWatch またはその他のホストメトリクスを使用して、クライアント側が現在 CPU またはネットワーク帯域幅、またはその両方によって制約を受けているかどうかを判断します。クライアント側が制約を受けている場合は、それに応じてクライアントをスケーリングします。