Amazon Aurora MySQL 호환 에디션 DB 인스턴스에 연결하려고 하는데 "Too many connections" 오류가 발생합니다. DB 인스턴스의 최대 연결 값과 이를 변경하는 방법을 알고 싶습니다.
간략한 설명
사용 가능한 모든 연결을 다른 클라이언트에서 사용 중인 경우 Too many connections 오류가 발생합니다. max_connections 파라미터는 DB 인스턴스의 총 연결 수를 정의합니다.
이 문제를 해결하려면 먼저 DB 인스턴스에서 실행 중인 모든 스레드를 확인합니다. 그런 다음 DB 인스턴스에서 로깅을 활성화합니다. 마지막으로 기존 연결을 검토하고 불필요한 연결을 종료하여 연결 압력을 줄입니다.
예를 들어 휴면 상태에서 연결을 종료하는 것이 모범 사례입니다. 또는 DB 인스턴스에 대한 최대 연결 수를 늘립니다.
해결 방법
DB 인스턴스에서 실행 중인 스레드 보기
먼저 DB 인스턴스에서 실행 중인 모든 쿼리를 확인합니다.
그런 다음 threads_connected 값을 확인합니다. threads_connected 파라미터는 열려 있는 연결 수를 표시합니다. 자세한 내용은 MySQL 웹 사이트의 Threads_connected를 참조하십시오. 다음 명령을 실행합니다.
-
MySQL 5.7
mysql> SELECT variable_value AS Threads_Connected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name='threads_connected';
-
MySQL 8.0
mysql> SELECT variable_value AS Threads_Connected from performance_schema.global_status where VARIABLE_NAME = 'threads_connected';
참고: Aurora는 관리 사용자(rdsadmin)로 데이터베이스에 연결할 수 있으므로 threads_connected의 값이 max_connections보다 더 높을 수 있습니다.
DatabaseConnections 대신 threads_connected 또는 information_schema.processlist를 사용하는 것이 모범 사례입니다. 이러한 파라미너는 다른 클라이언트에서 사용 중인 사용 가능한 MySQL 연결을 정확하게 보여줍니다. DatabaseConnections는 전체 원격 TCP 연결을 보여 주지만 휴면 연결이나 데이터베이스 엔진이 자체 목적으로 생성하는 세션은 고려하지 않습니다. 따라서 DatabaseConnections 값이 MySQL 스레드에서 수행 중인 작업 수보다 작을 수 있습니다.
DB 인스턴스에서 로깅 활성화
연결 증가 문제의 근본 원인을 파악하려면 Aurora MySQL 호환 DB 인스턴스에서 로깅을 활성화합니다.
general_log, slow_query_log 또는 고급 감사 로그 파리미터를 활성화합니다.
DB 인스턴스의 기존 연결 종료
DB 인스턴스에서 실행 중인 사용자 세션 또는 쿼리를 종료합니다.
DB 인스턴스로의 최대 연결 수 늘리기
DB 인스턴스로의 최대 연결 수를 늘리려면 다음 방법 중 하나를 사용합니다.
max_connections 파라미터 늘리기
사용자 지정 DB 인스턴스 파라미터 그룹을 사용하여 max_connections 파라미터의 값을 더 크게 설정합니다. 이 방법은 작동 중단을 일으키지 않습니다. 하지만 DB 인스턴스가 기본 파라미터 그룹을 사용하는 경우 파라미터 그룹을 사용자 지정 파라미터 그룹으로 변경해야 합니다. 이 작업은 작동 중단이 발생합니다.
max_connection 파라미터의 예:
max_connections = GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})
먼저 DB 인스턴스의 max_connections 파라미터의 현재 값을 확인합니다. 이렇게 하려면 DB 인스턴스에 연결된 파라미터 그룹을 확인하거나 다음 쿼리를 실행합니다.
select @@max_connections;
DB 클러스터와 DB 인스턴스 파라미터 그룹 모두에서 max_connections를 설정할 수 있습니다. 하지만 DB 인스턴스 파라미터 설정이 DB 클러스터 파라미터 설정보다 우선합니다. max_connections 파라미터는 동적이므로 파라미터 값을 변경한 후 인스턴스를 재부팅할 필요가 없습니다.
각 DB 인스턴스 클래스의 기본 max_connections 및 기타 요구 사항에 대한 자세한 내용은 Aurora MySQL DB 인스턴스로의 최대 연결 수를 참조하십시오.
참고: Aurora MySQL과 Amazon Relational Database Service(Amazon RDS) for MySQL DB 인스턴스의 메모리 오버헤드는 서로 다릅니다. Aurora MySQL과 동일한 인스턴스 클래스를 사용하는 Amazon RDS for MySQL DB 인스턴스의 max_connections 값은 다를 수 있습니다.
max_connections 모범 사례는 Amazon RDS for MySQL 또는 Amazon RDS for PostgreSQL 인스턴스의 최대 연결을 늘리려면 어떻게 해야 합니까?를 참조하십시오.
인스턴스 스케일 업
max_connections 최대값을 초과할 경우 인스턴스를 메모리가 더 많은 DB 인스턴스 클래스로 스케일 업하십시오.
참고: 확장 시 DB 인스턴스가 중단됩니다.
Amazon RDS 프록시 사용
애플리케이션의 확장 능력을 향상시키려면 Amazon RDS Proxy for Aurora를 사용하십시오.