

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

`Client:ClientWrite` 이벤트는 RDS for PostgreSQL이 클라이언트에 데이터를 쓰기 위해 대기 중일 때 발생합니다.

**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 DB 클러스터로부터 받은 모든 데이터를 읽어야 합니다. 클라이언트에서 데이터를 수신하기 전에 클러스터가 대기하는 시간은 `Client:ClientWrite` 이벤트를 트리거합니다.

RDS for PostgreSQL DB 인스턴스와 클라이언트 간의 네트워크 처리량(throughput)이 감소하면 이 이벤트가 발생할 수 있습니다. 클라이언트에 대한 CPU 압력 및 네트워크 포화 상태시에도 이 이벤트가 발생할 수 있습니다. *CPU 압력*은 CPU가 완전히 활용되고 CPU 시간을 기다리는 작업이 있을 때입니다. *네트워크 포화*는 데이터베이스와 클라이언트 간의 네트워크가 처리할 수 있는 것보다 많은 데이터를 전달하는 경우입니다.

## 대기 증가의 가능한 원인
<a name="wait-event.clientwrite.causes"></a>

상위 대기에서 나타나는 `Client:ClientWrite` 이벤트의 일반적인 원인은 다음을 포함합니다.

**네트워크 대기 시간 증가**  
RDS for PostgreSQL DB 인스턴스와 클라이언트 간에 네트워크 지연 시간이 늘어날 수 있습니다. 네트워크 대기 시간이 높을수록 클라이언트가 데이터를 수신하는 데 필요한 시간이 늘어납니다.

**클라이언트에 대한 로드 증가**  
클라이언트에 CPU 압력 또는 네트워크 포화가 있을 수 있습니다. 클라이언트에 대한 로드가 증가하면 RDS for MySQL 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>

네트워크 대기 시간을 줄이고 네트워크 처리량(throughput)을 늘리려면 RDS for PostgreSQL DB 인스턴스와 동일한 가용 영역 및 Virtual Private Cloud(VPC) 서브넷에 클라이언트를 배치합니다.

### 현재 세대 인스턴스 사용
<a name="wait-event.clientwrite.actions.db-instance-class"></a>

점보 프레임을 지원하는 DB 인스턴스 클래스를 사용하지 않는 경우도 있습니다. Amazon EC2 애플리케이션을 실행하는 경우 클라이언트에 현재 세대 인스턴스를 사용하는 것이 좋습니다. 또한 클라이언트 운영 체제에서 최대 전송 단위(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 또는 네트워크 대역폭 또는 둘 다에 의해 제한되어 있는지 확인합니다. 클라이언트가 제한된 경우 그에 따라 클라이언트를 확장합니다.