Amazon RDS for MySQL 또는 Amazon RDS for PostgreSQL 인스턴스의 최대 연결을 늘리려면 어떻게 해야 합니까?
Amazon Relational Database Service(RDS) for MySQL 또는 Amazon RDS for PostgreSQL DB 인스턴스의 최대 연결을 늘리고 싶습니다.
해결 방법
현재 max_connections 값 보기
Amazon RDS for MySQL에서 max_connections 지표는 설정된 최대 (허용) 동시 클라이언트 연결 수를 모니터링합니다.
기본적으로 max_connections 파라미터는 (DBInstanceClassMemory 값에서 계산된) Amazon RDS for MySQL의 다음 공식을 기반으로 합니다.
max_connections = DBInstanceClassMemory/12582880
max_connections의 현재 값을 확인하려면 Amazon RDS for MySQL 인스턴스에 연결한 후 다음 명령을 실행합니다.
SHOW GLOBAL VARIABLES LIKE 'max_connections';
Amazon RDS for PostgreSQL에서 max_connections 지표는 설정된 최대 동시 연결 수를 모니터링합니다. 기본적으로 max_connections 파라미터는 (DBInstanceClassMemory 값에서 계산된) Amazon RDS for PostgreSQL의 다음 공식을 기반으로 합니다.
max_connections = LEAST({DBInstanceClassMemory/9531392}, 5000)
max_connections의 현재 값을 확인하려면 Amazon RDS for PostgreSQL 인스턴스에 연결한 후 다음 명령을 실행합니다.
postgres=> show max_connections;
RDS for MySQL 또는 RDS for PostgreSQL 모두에 대한 max_connections의 기본값은 Amazon RDS 인스턴스에서 사용하는 인스턴스 클래스에 따라 달라집니다. 사용 가능한 메모리가 더 많은 DB 인스턴스 클래스는 더 많은 수의 데이터베이스 연결도 지원합니다.
수식을 사용하여 계산한 max_connections의 기본 수는 이전 명령에서 반환한 기본 연결 수와 약간 다를 수 있습니다. 이는 전체 DBInstanceClassMemory 중 일부 메모리가 기본 OS 작업을 위해 예약되어 있기 때문입니다. 위 명령은 기본 호스트 OS가 아닌 PostgreSQL 엔진용으로 예약된 메모리만 고려합니다.
연결이 너무 많은 이유 검토
클라이언트 연결 수가 max_connections 값을 초과하면 다음과 유사한 오류가 발생합니다.
- RDS for MySQL 인스턴스의 "연결이 너무 많음" 오류가 발생했습니다.
- RDS for PostgreSQL 인스턴스용 RDS에 대한 "치명적: 나머지 연결 슬롯은 복제되지 않은 수퍼유저 연결용으로 예약되어 있음" 오류
다음 요인으로 인해 데이터베이스 연결이 max_connections 값을 초과할 수 있습니다.
DB 인스턴스에 대한 클라이언트 또는 애플리케이션 연결 수가 증가: 워크로드 또는 테이블/행 수준 잠금이 증가했기 때문입니다.
작업 종료 후 클라이언트 또는 애플리케이션 연결이 부적절하게 끝나는 경우: 서버 연결이 제대로 종료되지 않으면, 클라이언트 애플리케이션이 신규 연결을 엽니다. 시간이 지남에 따라 이러한 새 서버 연결로 인해 인스턴스가 max_connections 값을 초과할 수 있습니다. RDS for MySQL DB 인스턴스의 모든 활성 연결을 나열하려면 다음 명령을 실행합니다.
SHOW FULL PROCESSLIST
RDS for PostgreSQL 인스턴스에 대한 각 데이터베이스의 연결을 보려면 다음 명령을 실행합니다.
SELECT datname, numbackends FROM pg_stat_database;
휴면 연결: 휴면 연결은 비활성 열린 연결이라고도 하며, MySQL에서 더 높은 연결 시간 초과 파라미터(예: wait_timeout 또는 interactive_timeout)로 인해 발생합니다. 연결 제한을 너무 높이 구성하면 연결이 사용되지 않더라도 메모리 사용량이 높아질 수 있습니다. 따라서 애플리케이션 서버가 데이터베이스에 대한 모든 클라이언트 연결을 열려고 하면 해당 연결이 거부될 수 있습니다. RDS for MySQL DB 인스턴스에서 휴면 연결을 종료하려면 다음 명령을 실행합니다.
CALL mysql.rds_kill(example-pid);
유휴 연결: 다음 쿼리를 실행하여 RDS for PostgreSQL 인스턴스의 유휴 연결을 볼 수 있습니다. 이 쿼리는 15분 이상 '유휴', '트랜잭션 유휴', '트랜잭션 유휴(중단됨)’ 및 '비활성화됨' 상태 중 하나인 백엔드 프로세스에 대한 정보를 표시합니다.
SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled') AND state_change < current_timestamp - INTERVAL '15' MINUTE;
RDS for PostgreSQL 인스턴스에서 유휴 연결을 종료하려면 다음 명령을 실행합니다.
SELECT pg_terminate_backend(example-pid)
팁: 애플리케이션 성능에 필요한 활성 연결만 구성하는 것이 좋습니다. 더 큰 Amazon RDS DB 인스턴스 클래스로 업그레이드하는 것도 고려해 볼 수 있습니다.
max_connections 값 늘리기
다음 방법을 사용하여 RDS for MySQL 또는 RDS for PostgresSQL DB 인스턴스에 대한 최대 연결 수를 늘릴 수 있습니다.
- 사용자 정의 인스턴스 수준의 파라미터 그룹을 사용하여 max_connections 파라미터에 대해 더 큰 값을 설정합니다. max_connections 파라미터를 늘리면 중단이 발생하지 않습니다. max_connections의 값을 기본값 이상으로 늘릴 수 있지만 최선의 방법은 아닙니다. 워크로드가 증가하고 더 많은 메모리가 필요할 때 인스턴스에 문제가 발생할 수 있기 때문입니다. 연결 수를 늘리면 메모리 사용량이 증가할 수 있습니다. 메모리가 부족한 인스턴스는 충돌할 수 있습니다. 이는 특히 소규모 인스턴스의 경우에 해당됩니다. max_connections 값을 늘리는 경우, 리소스 사용량을 모니터링해야 합니다. 또한 증가에 대해서는 담당 DBA와 상의하십시오. 기본값을 유지하거나, 더 많은 연결이 필요할 때 더 큰 인스턴스 클래스로 스케일 업하는 것이 제일 좋습니다.
- DB 인스턴스에서 기본 파라미터 그룹을 사용하는 경우 파라미터 그룹을 사용자 지정 파라미터 그룹으로 변경합니다. 사용자 지정 DB 파라미터 그룹을 Amazon RDS 인스턴스와 연결하고 인스턴스를 재부팅해야 합니다. 새 사용자 지정 파라미터 그룹이 DB 인스턴스와 연결되면 max_connections 파라미터 값을 수정할 수 있습니다. 자세한 내용은 Amazon RDS DB 파라미터 그룹의 값을 어떻게 수정합니까?를 참조하세요.
참고: 파라미터 그룹을 변경하면 중단이 발생할 수 있습니다. 자세한 내용은 DB 파라미터 그룹 작업을 참조하세요. - DB 인스턴스를 더 많은 메모리가 있는 DB 인스턴스 클래스로 확장합니다. RDS 인스턴스를 확장하면 계정 청구에 영향을 미칩니다. 자세한 내용은 Amazon RDS에 대한 DB 인스턴스 청구를 참조하세요.
경고: Amazon RDS DB 인스턴스를 수정할 때 가동 중단이 발생합니다.
max_connections 파라미터 구성에 대한 모범 사례 따르기
DB 인스턴스의 max_connections 파라미터로 작업할 때 다음 모범 사례를 고려해야 합니다.
- 기본 연결 제한은 버퍼 풀 등의 다른 주요 메모리 소비자의 기본값을 사용하는 시스템에 맞춰 튜닝됩니다. 인스턴스 클래스 값을 변경하는 대신 인스턴스 클래스를 스케일 업하는 것이 가장 좋습니다. 그러나 인스턴스에 사용 가능한 메모리가 많은 경우 이 파라미터를 수동으로 변경할 수 있습니다. DB 인스턴스에 대해 이러한 설정을 변경하기 전에, DB 인스턴스에서 사용 가능한 메모리의 증가 또는 감소를 고려하여 연결 제한을 조정하는 것이 좋습니다.
- max_connections 값을 설정하여 각 DB 인스턴스에서 열 것으로 예상되는 최대 연결 수보다 약간 더 높게 설정합니다.
- RDS for MySQL 인스턴스의 경우 성능 스키마를 활성화한 경우 max_connections 파라미터 설정에 주의하십시오. 성능 스키마 메모리 구조는 서버 구성 변수에 따라 자동으로 크기가 조정됩니다. 변수를 높게 설정할수록 성능 스키마가 더 많은 메모리를 사용합니다. 극단적인 경우 이 조건으로 인해 T2와 T3 등의 더 작은 인스턴스 유형에서 메모리 부족 문제가 발생할 수 있습니다. 성능 스키마를 사용하는 경우 max_connections 설정을 기본값으로 두는 것이 좋습니다. max_connections를 기본값보다 훨씬 높은 값으로 늘리려면 성능 스키마를 비활성화하는 것이 좋습니다.
참고: Amazon RDS for MySQL DB 인스턴스에 대해 성능 개선 도우미를 활성화하면 성능 스키마가 자동으로 활성화됩니다. - MySQL용 RDS 인스턴스의 경우 max_connections 파라미터를 조정할 때 다음 MySQL 연결 관련 파라미터를 검토해야 합니다. wait_timeout: 연결이 종료되기 전 서버가 비대화형 TCP/IP 또는 Unix 파일 연결에서 작업을 대기하는 시간(초)
interactive_timeout: 서버가 연결을 종료하기 전에 해당 연결에 대한 활동을 기다리는 시간(초)
net_read_timeout: 읽기 작업을 삭제하기 전에 TCP/IP 연결에서 추가 데이터를 기다리는 시간(초)
net_write_timeout: 쓰기 작업을 삭제하기 전에 블록이 쓰여질 때까지 TCP/IP 연결을 기다리는 시간(초)
max_execution_time: SELECT 문에 대한 실행 제한 시간(밀리초)
max_connect_errors: 중단된 연결 수가 이보다 많으면 호스트가 추가 연결에서 차단됨
max_user_connections: 지정한 MySQL 계정에 허용되는 최대 동시 연결 수 - RDS for PostgreSQL 인스턴스의 경우 max_connections 파라미터를 조정할 때 다음 PostgreSQL 연결 관련 파라미터도 검토해야 함
idle_in_transaction_session_timeout: 지정 기간(밀리초)보다 오래 유휴 상태인, 열린 트랜잭션이 있는 세션을 종료합니다. 이렇게 하면 해당 세션에서 보유한 모든 잠금을 해제하고 연결 슬롯을 재사용할 수 있습니다. 또한 이 트랜잭션에만 표시되는 튜플은 진공 상태입니다.
tcp_keepalives_idle: 운영 체제가 클라이언트에 TCP 연결 유지 메시지를 보낸 다음의 비활성 시간(초)
tcp_keepalives_interval: 클라이언트가 인정하지 않는 TCP 연결 유지 메시지가 재전송된 다음의 시간(초)
tcp_keepalives_count: 서버에 대한 클라이언트 연결이 비활성 상태로 간주되기 전에 손실될 수 있는 TCP 연결 유지 수
참고: 이 문서에는 이러한 파라미터에 대한 권장 값이 포함되어 있지 않습니다. 이러한 값은 본인의 사용 사례에 따라 달라지기 때문입니다.
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 16일 전lg...
- 질문됨 7년 전lg...
- 질문됨 3달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 9달 전
- AWS 공식업데이트됨 3년 전