Amazon RDS for MySQL 또는 Amazon RDS for PostgreSQL 인스턴스의 최대 연결을 늘리려면 어떻게 해야 합니까?

4분 분량
0

MySQL용 Amazon Relational Database Service(Amazon RDS) 또는 DB 인스턴스용 Amazon RDS for PostgreSQL의 최대 연결을 늘리고 싶습니다.

해결 방법

참고: 최대 연결 수를 늘리기 전에 기존 구성을 최적화하는 것이 모범 사례입니다.

현재 max_connections 값 확인

max_connections 지표는 RDS for MySQL와 RDS for PostgreSQL 모두에 대한 최대 데이터베이스 연결 수를 설정합니다. max_connections의 기본값은 Amazon RDS 인스턴스가 사용하는 인스턴스 클래스에 따라 달라집니다. 사용 가능한 메모리가 더 많은 DB 인스턴스 클래스는 데이터베이스 연결 수가 더 많을 수 있습니다.

max_connections 값을 확인하려면 DB 엔진의 Amazon RDS DB 인스턴스에 연결하고 다음 명령을 실행합니다.

  • RDS for MySQL:

    SHOW GLOBAL VARIABLES LIKE 'max_connections';
  • RDS for PostgreSQL:

    postgres=> show max_connections;

참고: 수식을 사용하여 계산한 기본 max_connections 수는 위 명령의 출력과 약간 다를 수 있습니다. 이러한 차이는 Amazon RDS가 전체 DBInstanceClassMemory에서 기본 OS 작업을 위해 일부 메모리를 예약하기 때문입니다. 위 명령은 PostgreSQL 엔진용으로 예약된 메모리만 사용하고 기본 호스트 OS용 메모리는 사용하지 않습니다.

기존 연결 최적화

max_connections 값을 늘리기 전에 기존 연결 수를 줄일 수 있는지 확인하십시오. 클라이언트 연결 수가 max_connections 값을 초과하면 다음 오류 중 하나가 발생합니다.

Amazon RDS의 워크로드가 증가하거나 테이블 또는 행 수준의 잠금이 있는 경우 이러한 오류가 발생할 수 있습니다. 인스턴스의 워크로드가 예상대로 작동하는 경우 max_connections 파라미터를 늘려야 합니다.

작업 종료 후 모든 클라이언트 및 애플리케이션 연결을 닫았는지 확인합니다.

서버 연결이 종료되지 않은 경우 클라이언트 애플리케이션은 새 연결을 엽니다. 시간이 지남에 따라 이러한 새 서버 연결로 인해 인스턴스가 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 인스턴스의 유휴 연결을 보려면 다음 쿼리를 실행합니다.

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';

RDS for MySQL DB 인스턴스에서 휴면 연결을 종료하려면 다음 명령을 실행합니다.

CALL mysql.rds_kill(example-pid);

(PostgreSQL만 해당) 유휴 연결 확인

RDS for PostgreSQL 인스턴스의 유휴 연결을 보려면 다음 쿼리를 실행합니다.

    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;

쿼리의 출력에는 유후, 트랜잭션 유휴, 트랜잭션 유휴(중단됨) 또는 15분 이상 유휴로 비활성화됨 상태에 있는 백엔드 프로세스가 표시됩니다.

RDS for PostgreSQL 인스턴스에서 유휴 연결을 종료하려면 다음 명령을 실행합니다.

SELECT pg_terminate_backend(example-pid);

참고: 애플리케이션 성능에 필요한 활성 연결만 구성하는 것이 모범 사례입니다. 애플리케이션 구조에 유휴 연결이 필요한 경우 Amazon RDS 프록시를 사용하는 것이 모범 사례입니다.

최대 연결 수 늘리기

참고: 인스턴스를 스케일 업하면 가동 중지 시간이 발생하고 청구되는 방식이 변경됩니다.

최대 연결 수를 늘리려면 DB 인스턴스를 메모리가 더 많은 DB 인스턴스 클래스로 스케일 업하는 것이 모범 사례입니다. max_connections 파라미터를 기본값 이상으로 높이는 것은 모범 사례가 아닙니다. 더 많은 연결에 더 많은 메모리 사용량이 필요한 경우 인스턴스에 문제가 발생할 수 있습니다. 메모리가 부족한 인스턴스는 충돌이 발생할 수 있습니다. max_connections 값을 높이는 경우 FreeableMemory Amazon CloudWatch 지표를 사용하여 리소스 사용량을 모니터링하십시오.

하지만 인스턴스에 사용 가능한 메모리가 많으면 max_connections 파라미터를 수동으로 변경하십시오. max_connections를 조정하기 전에 DB 인스턴스의 사용 가능한 메모리 변화를 고려하여 파라미터 그룹의 연결 제한을 조정하십시오.

DB 인스턴스가 기본 파라미터 그룹을 사용하는 경우 사용자 지정 파라미터 그룹을 생성하고 사용하여 max_connections를 수정해야 합니다. 사용자 지정 DB 파라미터 그룹을 Amazon RDS 인스턴스와 연결한 다음 인스턴스를 재부팅합니다. 새 사용자 지정 파라미터 그룹을 DB 인스턴스에 연결한 후 max_connections 파라미터 값을 수정할 수 있습니다. 자세한 내용은 Amazon RDS DB 파라미터 그룹의 값을 수정하려면 어떻게 해야 합니까?를 참조하십시오. max_connections 값을 각 DB 인스턴스에서 열 것으로 예상되는 최대 연결 수보다 약간 높게 설정하십시오.

참고: 재부팅하는 동안 잠시 중단이 발생합니다.

max_connections를 늘리기 위한 RDS for MySQL 모범 사례

성능 스키마를 활성화한 경우 기본 max_connections 설정을 사용하는 것이 모범 사례입니다. 성능 스키마 메모리 구조는 서버 구성 변수에 따라 자동으로 크기가 조정됩니다.

참고: Amazon RDS for MySQL DB 인스턴스에 대한 성능 인사이트를 활성화하면 성능 스키마가 자동으로 활성화됩니다.

사용 사례에 따라 다음과 같은 MySQL 연결 관련 파라미터의 제한 시간 설정을 최적화하십시오.

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

이러한 파라미터에 대한 자세한 내용은 MySQL 웹 사이트의 7.1.8 서버 시스템 변수를 참조하십시오.

max_connections를 늘리기 위한 RDS for PostgreSQL 모범 사례

사용 사례에 따라 다음과 같은 PostgreSQL 연결 관련 파라미터의 제한 시간 설정을 최적화하십시오.

  • idle_in_transaction_session_timeout
  • tcp_keepalives_idle
  • tcp_keepalives_interval
  • tcp_keepalives_count

이러한 파라미터에 대한 자세한 내용은 PostgreSQL 웹 사이트의 idle_in_transaction_session_timeout(정수)19.3.2 TCP 설정을 참조하십시오.