Client:ClientRead - Amazon Relational Database Service

Client:ClientRead

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

지원되는 엔진 버전

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

컨텍스트

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

대기 증가의 가능한 원인

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

네트워크 대기 시간 증가

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

클라이언트에 대한 로드 증가

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

과도한 네트워크 왕복

RDS for PostgreSQL DB 인스턴스와 클라이언트 간의 네트워크 왕복 횟수가 많으면 클라이언트에서 RDS for PostgreSQL DB 인스턴스로의 데이터 전송을 지연시킬 수 있습니다.

대량 복사 연산

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

유휴 클라이언트 연결

클라이언트가 idle in transaction 상태의 RDS for PostgreSQL DB 인스턴스에 연결하는 경우 DB 인스턴스는 클라이언트가 더 많은 데이터를 보내거나 명령을 실행할 때까지 기다릴 수 있습니다. 이 상태의 연결은Client:ClientRead 이벤트 증가로 이어질 수 있습니다.

연결 풀링에 사용되는 PGBouncer

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

작업

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

인스턴스와 동일한 가용 영역 및 VPC 서브넷에 클라이언트를 배치합니다.

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

클라이언트 확장

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

현재 세대 인스턴스 사용

점보 프레임을 지원하는 DB 인스턴스 클래스를 사용하지 않는 경우도 있습니다. Amazon EC2 애플리케이션을 실행하는 경우 클라이언트에 현재 세대 인스턴스를 사용하는 것이 좋습니다. 또한 클라이언트 운영 체제에서 최대 전송 단위(MTU)를 구성합니다. 이 기술은 네트워크 왕복 수를 줄이고 네트워크 처리량을 늘릴 수 있습니다. 자세한 내용은 Amazon EC2 사용 설명서점보 프레임(9001 MTU)을 참조하세요.

DB 인스턴스 클래스에 대한 자세한 내용은 DB 인스턴스 클래스 섹션을 참조하세요. Amazon EC2 인스턴스 유형과 동일한 DB 인스턴스 클래스를 확인하려면 db.가 Amazon EC2 인스턴스 유형 이름 앞에 있어야 합니다. 예를 들어, r5.8xlarge Amazon EC2 인스턴스는 db.r5.8xlarge DB 인스턴스 클래스입니다.

네트워크 대역폭 향상

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

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

CloudWatch 지표에 대한 자세한 내용은 Amazon RDS에 대한 Amazon CloudWatch 지표 섹션을 참조하세요.

최대 네트워크 성능 모니터링

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

자세한 내용은 Amazon EC2 사용 설명서의 Amazon EC2 인스턴스의 네트워크 성능 모니터링Amazon EC2 사용 설명서의 Amazon EC2 인스턴스의 네트워크 성능 모니터링을 참조하세요.

'트랜잭션에서 유휴' 상태의 트랜잭션 모니터링

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