

# io/socket/sql/client\$1connection
<a name="ams-waits.client-connection"></a>

`io/socket/sql/client_connection` 이벤트는 스레드가 새 연결을 처리하고 있을 때 발생합니다.

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

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

이 대기 이벤트 정보는 다음 엔진 버전에서 지원됩니다.
+ Aurora MySQL 버전 2 및 3

## 컨텍스트
<a name="ams-waits.client-connection.context"></a>

`io/socket/sql/client_connection` 이벤트는 mysqld가 들어오는 새 클라이언트 연결을 처리하기 위해 스레드를 만드는 중임을 나타냅니다. 이 시나리오에서는 연결이 스레드가 할당될 때까지 기다리는 동안 새 클라이언트 연결 요청 서비스 처리 속도가 느려집니다. 자세한 내용은 [MySQL 서버(mysqld)](AuroraMySQL.Managing.Tuning.concepts.md#AuroraMySQL.Managing.Tuning.concepts.processes.mysqld) 섹션을 참조하세요.

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

이 이벤트가 정상보다 많이 발생해 성능 문제를 일으킬 수 있는 경우 일반적인 원인은 다음과 같습니다.
+ 애플리케이션에서 Amazon RDS 인스턴스로 새 사용자 연결이 급증했습니다.
+ 네트워크, CPU 또는 메모리가 제한되기 때문에 DB 인스턴스에서 새 연결을 처리할 수 없습니다.

## 작업
<a name="ams-waits.client-connection.actions"></a>

`io/socket/sql/client_connection`이 데이터베이스 활동을 지배한다고 해서 반드시 성능 문제를 나타내는 것은 아닙니다. 유휴 상태가 아닌 데이터베이스에서는 대기 이벤트가 항상 맨 위에 있습니다. 성능이 저하될 때만 작동합니다. 대기 이벤트의 원인에 따라 다른 작업을 권장합니다.

**Topics**
+ [문제가 있는 세션 및 쿼리 식별](#ams-waits.client-connection.actions.identify-queries)
+ [연결 관리를 위한 모범 사례 준수](#ams-waits.client-connection.actions.manage-connections)
+ [리소스가 제한되는 경우 인스턴스 확장](#ams-waits.client-connection.upgrade)
+ [상위 호스트 및 상위 사용자 확인](#ams-waits.client-connection.top-hosts)
+ [performance \$1schema 테이블 쿼리](#ams-waits.client-connection.perf-schema)
+ [쿼리의 스레드 상태 확인](#ams-waits.client-connection.thread-states)
+ [요청 및 쿼리 감사](#ams-waits.client-connection.auditing)
+ [데이터베이스 연결 풀링](#ams-waits.client-connection.pooling)

### 문제가 있는 세션 및 쿼리 식별
<a name="ams-waits.client-connection.actions.identify-queries"></a>

DB 인스턴스에 병목 현상이 발생하는 경우 첫 번째 작업은 이를 유발하는 세션과 쿼리를 찾는 것입니다. 유용한 블로그 게시물은 [성능 개선 도우미를 통해 Amazon Aurora MySQL 워크로드 분석](https://aws.amazon.com/blogs/database/analyze-amazon-aurora-mysql-workloads-with-performance-insights/)을 참조하세요.

**병목 현상을 일으키는 세션 및 쿼리를 식별하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Performance Insights**(성능 개선 도우미)를 선택합니다.

1. DB 인스턴스를 선택합니다.

1. **데이터베이스 로드(Database load)**에서 **대기별 조각(Slice by wait)**을 선택합니다.

1. 페이지 하단에서 **상위 SQL(Top SQL)**을 선택합니다.

   목록 맨 위에 있는 쿼리로 인해 데이터베이스에 대한 로드가 가장 높습니다.

### 연결 관리를 위한 모범 사례 준수
<a name="ams-waits.client-connection.actions.manage-connections"></a>

연결을 관리하려면 다음 전략을 고려하세요.
+ 연결 풀링 사용

  필요에 따라 연결 수를 점진적으로 늘릴 수 있습니다. 자세한 내용은 [Amazon Aurora MySQL 데이터베이스 관리자 핸드북](https://d1.awsstatic.com/whitepapers/RDS/amazon-aurora-mysql-database-administrator-handbook.pdf) 백서를 참조하세요.
+ 리더 노드를 사용하여 읽기 전용 트래픽을 재배포합니다.

  자세한 내용은 [Aurora 복제본](Aurora.Replication.md#Aurora.Replication.Replicas) 및 [Amazon Aurora 엔드포인트 연결](Aurora.Overview.Endpoints.md)를 참조하세요.

### 리소스가 제한되는 경우 인스턴스 확장
<a name="ams-waits.client-connection.upgrade"></a>

다음 리소스에서 제한의 예를 찾아보세요.
+ CPU

  CPU 사용량이 높은지 Amazon CloudWatch 지표를 확인하세요.
+ Network

  CloudWatch 지표, `network receive throughput` 및 `network transmit throughput`의 값이 증가했는지 확인합니다. 인스턴스가 인스턴스 클래스의 네트워크 대역폭 제한에 도달한 경우 RDS 인스턴스를 더 높은 인스턴스 클래스 유형으로 확장하는 것이 좋습니다. 자세한 내용은 [Amazon AuroraDB 인스턴스 클래스](Concepts.DBInstanceClass.md) 섹션을 참조하세요.
+ 여유 메모리 

  CloudWatch 지표 `FreeableMemory`가 하락했는지 확인합니다. 또한 향상된 모니터링을 켜는 것이 좋습니다. 자세한 내용은 [Enhanced Monitoring을 사용하여 OS 지표 모니터링](USER_Monitoring.OS.md) 섹션을 참조하세요.

### 상위 호스트 및 상위 사용자 확인
<a name="ams-waits.client-connection.top-hosts"></a>

성능 개선 도우미를 사용하여 상위 호스트와 상위 사용자를 확인합니다. 자세한 내용은 [성능 개선 도우미 대시보드를 사용한 지표 분석](USER_PerfInsights.UsingDashboard.md) 섹션을 참조하세요.

### performance \$1schema 테이블 쿼리
<a name="ams-waits.client-connection.perf-schema"></a>

현재 및 총 연결의 정확한 개수를 얻으려면 `performance_schema` 테이블을 쿼리합니다. 이 기술을 사용하면 많은 수의 연결을 생성하는 소스 사용자 또는 호스트를 식별할 수 있습니다. 예를 들어 다음과 같이 `performance_schema` 테이블을 쿼리합니다.

```
SELECT * FROM performance_schema.accounts;
SELECT * FROM performance_schema.users;
SELECT * FROM performance_schema.hosts;
```

### 쿼리의 스레드 상태 확인
<a name="ams-waits.client-connection.thread-states"></a>

성능 문제가 진행 중인 경우 쿼리의 스레드 상태를 확인합니다. `mysql` 클라이언트에서 다음 명령을 실행합니다.

```
show processlist;
```

### 요청 및 쿼리 감사
<a name="ams-waits.client-connection.auditing"></a>

사용자 계정의 요청 및 쿼리의 특성을 확인하려면 AuroraAurora MySQL 고급 감사를 사용합니다. 감사를 활성화하는 방법은 [Amazon Aurora MySQL DB 클러스터에서 고급 감사 사용](AuroraMySQL.Auditing.md) 섹션을 참조하세요.

### 데이터베이스 연결 풀링
<a name="ams-waits.client-connection.pooling"></a>

연결 관리를 위해 Amazon RDS Proxy를 사용하는 것이 좋습니다. RDS Proxy를 사용하면 애플리케이션이 데이터베이스 연결을 풀링하고 공유하도록 허용하여 확장 기능을 향상할 수 있습니다. RDS 프록시는 애플리케이션 연결을 유지하면서 예비 DB 인스턴스에 자동으로 연결하여 데이터베이스 장애에 대한 애플리케이션의 복원력을 높입니다. 자세한 내용은 [Aurora용 Amazon RDS Proxy](rds-proxy.md) 섹션을 참조하세요.