

# Client:ClientRead
<a name="apg-waits.clientread"></a>

`Client:ClientRead` 이벤트는 Aurora PostgreSQL이 클라이언트에서 데이터를 수신하기 위해 대기 중일 때 발생합니다.

**Topics**
+ [지원되는 엔진 버전](#apg-waits.clientread.context.supported)
+ [컨텍스트](#apg-waits.clientread.context)
+ [대기 증가의 가능한 원인](#apg-waits.clientread.causes)
+ [작업](#apg-waits.clientread.actions)

## 지원되는 엔진 버전
<a name="apg-waits.clientread.context.supported"></a>

이 대기 이벤트 정보는 Aurora PostgreSQL 버전 10 이상에서 지원됩니다.

## 컨텍스트
<a name="apg-waits.clientread.context"></a>

Aurora PostgreSQL DB 클러스터가 클라이언트로부터 데이터를 수신하기 위해 대기 중입니다. Aurora PostgreSQL DB 클러스터는 클라이언트로부터 데이터를 수신해야 클라이언트에 더 많은 데이터를 보낼 수 있습니다. 클라이언트에서 데이터를 수신하기 전에 클러스터가 대기하는 시간은 `Client:ClientRead` 이벤트를 트리거합니다.

## 대기 증가의 가능한 원인
<a name="apg-waits.clientread.causes"></a>

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

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

**클라이언트에 대한 로드 증가**  
클라이언트에 CPU 압력 또는 네트워크 포화가 있을 수 있습니다. 클라이언트 로드가 증가하면 클라이언트에서 Aurora PostgreSQL DB 클러스터로의 데이터 전송이 지연될 수 있습니다.

**과도한 네트워크 왕복**  
Aurora PostgreSQL DB 클러스터와 클라이언트 간의 네트워크 왕복 횟수가 많으면 클라이언트에서 Aurora PostgreSQL DB 클러스터로의 데이터 전송을 지연시킬 수 있습니다.

**대량 복사 연산**  
복사 연산 중에 데이터가 클라이언트의 파일 시스템에서 Aurora PostgreSQL DB 클러스터로 전송됩니다. DB 클러스터에 대량의 데이터를 전송하면 클라이언트에서 DB 클러스터로 데이터 전송이 지연될 수 있습니다.

**유휴 클라이언트 연결**  
Aurora PostgreSQL DB 인스턴스에 대한 연결이 트랜잭션 상태에서 유휴 상태이며 클라이언트가 추가 데이터를 전송하거나 명령을 실행하기를 기다리고 있습니다. 이 상태는 `Client:ClientRead` 이벤트 증가로 이어질 수 있습니다.

**연결 풀링에 사용되는 PGBouncer**  
PGBouncer에는 `pkt_buf`와 같은 낮은 수준의 네트워크 구성 설정이 있으며, 기본적으로 4,096으로 설정됩니다. 워크로드가 PGBouncer를 통해 4,096바이트보다 큰 쿼리 패킷을 보내는 경우, `pkt_buf` 설정을 8,192까지 늘리는 것이 좋습니다. 새 설정으로 인해 `Client:ClientRead` 이벤트의 수가 줄어들지 않는 경우 `pkt_buf` 설정을 16,384 또는 32,768과 같이 더 큰 값으로 설정하는 것이 좋습니다. 쿼리 텍스트가 큰 경우 더 큰 설정이 특히 유용할 수 있습니다.

## 작업
<a name="apg-waits.clientread.actions"></a>

대기 이벤트의 원인에 따라 다른 작업을 권장합니다.

**Topics**
+ [클러스터와 동일한 가용 영역 및 VPC 서브넷에 클라이언트를 배치합니다.](#apg-waits.clientread.actions.az-vpc-subnet)
+ [클라이언트 확장](#apg-waits.clientread.actions.scale-client)
+ [현재 세대 인스턴스 사용](#apg-waits.clientread.actions.db-instance-class)
+ [네트워크 대역폭 향상](#apg-waits.clientread.actions.increase-network-bandwidth)
+ [최대 네트워크 성능 모니터링](#apg-waits.clientread.actions.monitor-network-performance)
+ ['트랜잭션에서 유휴' 상태의 트랜잭션 모니터링](#apg-waits.clientread.actions.check-idle-in-transaction)

### 클러스터와 동일한 가용 영역 및 VPC 서브넷에 클라이언트를 배치합니다.
<a name="apg-waits.clientread.actions.az-vpc-subnet"></a>

네트워크 대기 시간을 줄이고 네트워크 처리량을 늘리려면 Aurora PostgreSQL DB 클러스터와 동일한 가용 영역 및 Virtual Private Cloud(VPC) 서브넷에 클라이언트를 배치합니다. 클라이언트가 가능한 한 DB 클러스터에 지리적으로 가까이 있는지 확인합니다.

### 클라이언트 확장
<a name="apg-waits.clientread.actions.scale-client"></a>

Amazon CloudWatch 또는 기타 호스트 지표를 사용하여 클라이언트가 현재 CPU 또는 네트워크 대역폭 또는 둘 다에 의해 제한되어 있는지 확인합니다. 클라이언트가 제한된 경우 그에 따라 클라이언트를 확장합니다.

### 현재 세대 인스턴스 사용
<a name="apg-waits.clientread.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 인스턴스 클래스에 대한 자세한 내용은 [Amazon AuroraDB 인스턴스 클래스](Concepts.DBInstanceClass.md) 섹션을 참조하세요. Amazon EC2 인스턴스 유형과 동일한 DB 인스턴스 클래스를 확인하려면 `db.`가 Amazon EC2 인스턴스 유형 이름 앞에 있어야 합니다. 예를 들어, `r5.8xlarge` Amazon EC2 인스턴스는 `db.r5.8xlarge` DB 인스턴스 클래스입니다.

### 네트워크 대역폭 향상
<a name="apg-waits.clientread.actions.increase-network-bandwidth"></a>

DB 클러스터의 수신 및 발신 네트워크 트래픽을 모니터링하는 `NetworkReceiveThroughput`과 `NetworkTransmitThroughput` Amazon CloudWatch 지표를 사용합니다. 이러한 지표는 네트워크 대역폭이 워크로드에 충분한지 확인하는 데 도움이 될 수 있습니다.

네트워크 대역폭이 충분하지 않으면 늘리세요. 만약 AWS 클라이언트 또는 DB 인스턴스가 네트워크 대역폭 제한에 도달했다면. 대역폭을 늘리는 유일한 방법은 DB 인스턴스 크기를 늘리는 것입니다.

CloudWatch 지표에 대한 자세한 내용은 [Amazon Aurora에 대한 Amazon CloudWatch 지표](Aurora.AuroraMonitoring.Metrics.md) 섹션을 참조하세요.

### 최대 네트워크 성능 모니터링
<a name="apg-waits.clientread.actions.monitor-network-performance"></a>

Amazon EC2 클라이언트를 사용하는 경우 Amazon EC2는 집계 인바운드 및 아웃바운드 네트워크 대역폭을 포함하여 네트워크 성능 지표에 대한 최댓값을 제공합니다. 또한 연결 추적을 제공하여 패킷이 예상대로 반환되고 도메인 이름 시스템(DNS)과 같은 서비스에 대한 링크-로컬 서비스 액세스를 제공합니다. 이러한 최댓값을 모니터링하려면 현재 향상된 네트워킹 드라이버를 사용하고 클라이언트의 네트워크 성능을 모니터링하세요.

자세한 내용은 **Amazon EC2 사용 설명서의 [Amazon EC2 인스턴스의 네트워크 성능 모니터링](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html)과 **Amazon EC2 사용 설명서의 [Amazon EC2 인스턴스의 네트워크 성능 모니터링](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/monitoring-network-performance-ena.html)을 참조하세요.

### '트랜잭션에서 유휴' 상태의 트랜잭션 모니터링
<a name="apg-waits.clientread.actions.check-idle-in-transaction"></a>

`idle in transaction` 연결의 수가 점점 늘어나고 있는지 확인하세요. 이를 수행하려면 `state`열의 `pg_stat_activity`테이블을 모니니터링하세요. 다음과 유사한 쿼리를 실행하여 연결 소스를 식별할 수 있습니다.

```
select client_addr, state, count(1) from pg_stat_activity 
where state like 'idle in transaction%' 
group by 1,2 
order by 3 desc
```