Client:ClientRead
Client:ClientRead
이벤트는 Aurora PostgreSQL이 클라이언트에서 데이터를 수신하기 위해 대기 중일 때 발생합니다.
지원되는 엔진 버전
이 대기 이벤트 정보는 Aurora PostgreSQL 버전 10 이상에서 지원됩니다.
컨텍스트
Aurora PostgreSQL DB 클러스터가 클라이언트로부터 데이터를 수신하기 위해 대기 중입니다. Aurora PostgreSQL DB 클러스터는 클라이언트로부터 데이터를 수신해야 클라이언트에 더 많은 데이터를 보낼 수 있습니다. 클라이언트에서 데이터를 수신하기 전에 클러스터가 대기하는 시간은 Client:ClientRead
이벤트를 트리거합니다.
대기 증가의 가능한 원인
상위 대기에서 나타나는 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과 같이 더 큰 값으로 설정하는 것이 좋습니다. 쿼리 텍스트가 큰 경우 더 큰 설정이 특히 유용할 수 있습니다.
작업
대기 이벤트의 원인에 따라 다른 작업을 권장합니다.
주제
클러스터와 동일한 가용 영역 및 VPC 서브넷에 클라이언트를 배치합니다.
네트워크 대기 시간을 줄이고 네트워크 처리량을 늘리려면 Aurora PostgreSQL DB 클러스터와 동일한 가용 영역 및 Virtual Private Cloud(VPC) 서브넷에 클라이언트를 배치합니다. 클라이언트가 가능한 한 DB 클러스터에 지리적으로 가까이 있는지 확인합니다.
클라이언트 확장
Amazon CloudWatch 또는 기타 호스트 지표를 사용하여 클라이언트가 현재 CPU 또는 네트워크 대역폭 또는 둘 다에 의해 제한되어 있는지 확인합니다. 클라이언트가 제한된 경우 그에 따라 클라이언트를 확장합니다.
현재 세대 인스턴스 사용
점보 프레임을 지원하는 DB 인스턴스 클래스를 사용하지 않는 경우도 있습니다. Amazon EC2 애플리케이션을 실행하는 경우 클라이언트에 현재 세대 인스턴스를 사용하는 것이 좋습니다. 또한 클라이언트 운영 체제에서 최대 전송 단위(MTU)를 구성합니다. 이 기술은 네트워크 왕복 수를 줄이고 네트워크 처리량을 늘릴 수 있습니다. 자세한 내용은 Amazon EC2 사용 설명서의 점보 프레임(9001 MTU)을 참조하세요.
DB 인스턴스 클래스에 대한 자세한 내용은 Amazon Aurora DB 인스턴스 클래스 섹션을 참조하세요. Amazon EC2 인스턴스 유형과 동일한 DB 인스턴스 클래스를 확인하려면 db.
가 Amazon EC2 인스턴스 유형 이름 앞에 있어야 합니다. 예를 들어, r5.8xlarge
Amazon EC2 인스턴스는 db.r5.8xlarge
DB 인스턴스 클래스입니다.
네트워크 대역폭 향상
DB 클러스터의 수신 및 발신 네트워크 트래픽을 모니터링하는 NetworkReceiveThroughput
과 NetworkTransmitThroughput
Amazon CloudWatch 지표를 사용합니다. 이러한 지표는 네트워크 대역폭이 워크로드에 충분한지 확인하는 데 도움이 될 수 있습니다.
네트워크 대역폭이 충분하지 않으면 늘리세요. 만약 AWS 클라이언트 또는 DB 인스턴스가 네트워크 대역폭 제한에 도달했다면. 대역폭을 늘리는 유일한 방법은 DB 인스턴스 크기를 늘리는 것입니다.
CloudWatch 지표에 대한 자세한 내용은 Amazon Aurora에 대한 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