특정 이벤트 혹은 사용자 증가로 인해 max_connection 값을 증가시켜야 할 때가 있습니다.
이번 시간에는 max_connection 파라미터에 대한 설명, 주의할 점과 변경하는 방법에 대해 소개드리도록 하겠습니다
1. RDS Max_connection 이란?
Max_connection 파라미터는 허용되는 동시 클라이언트 연결 수 를 의미합니다.
DB 인스턴스에 대해 허용되는 최대 연결 수는 DB 인스턴스의 인스턴스 수준 파라미터 그룹의 max_connections 파라미터로 결정됩니다.
기본적으로 {DBInstanceClassMemory/12582880} 값으로 세팅되어 있으며, DB 인스턴스 클래스에 따라 기본값이 달라집니다.
2. Max_connections 기본 값
max_connection 값은 수동으로 값을 지정 할 순 있으나, 성능 이상의 요청이 발생하면 DB 자체의 문제가 생길 우려가 있으므로 aws에서는 기본값을 사용 하시고 여유있게 설정하는 것을 권장합니다.
즉, 너무 많은 요청을 처리해야 한다면 Max_connection 값을 증가시키기 보단, 인스턴스 스펙을 조정하셔서 기본 값으로 사용하시길 바랍니다.
MySQL DB 인스턴스에 대해 허용되는 최대 연결 수는 DB 인스턴스의 인스턴스 수준 파라미터 그룹의 max_connections 파라미터로 결정됩니다.
위에서 말씀드렸듯이, {DBInstanceClassMemory/12582880} 값의 DBInstanceClassMemory 값은 DB 인스턴스에 사용할 수 있는 메모리 용량(바이트)을 나타내다보니 인스턴스 클래스에 영향을 받습니다.
따라서, 큰 이벤트에 대비하신다면 max_connections 값을 늘리는 것도 좋은 옵션이지만, 각 인스턴스 클래스에서 제공하는 서비스 한도 이상으로 증가시켜야 하신다면 인스턴스 클래스를 변경셔야 합니다
Aurora MySQL과 RDS for MySQL DB 인스턴스의 메모리 오버헤드는 서로 다릅니다. 따라서 동일한 인스턴스 클래스를 사용하는 Aurora MySQL과 RDS for MySQL DB 인스턴스의 max_connections 값은 다를 수 있습니다.
⏹️ RDS 인스턴스 타입에 따른 기본 max_connections
- t2.micro: 66
- t2.small: 150
- m3.medium: 296
- t2.medium: 312
- M3.large: 609
- t2.large: 648
- M4.large: 648
- M3.xlarge: 1237
- R3.large: 1258
- M4.xlarge: 1320
- M2.xlarge: 1412
- M3.2xlarge: 2492
- R3.xlarge: 2540
⏹️ Aurora 인스턴스 타입에 따른 기본 max_connections
- db.t2.small: 45
- db.t2.medium: 90
- db.r3.large: 1000
- db.r3.xlarge: 2000
- db.r3.2xlarge: 3000
- db.r3.4xlarge: 4000
- db.r3.8xlarge: 5000
- db.r4.large: 1000
- db.r4.xlarge: 2000
- db.r4.2xlarge: 3000
- db.r4.4xlarge: 4000
- db.r4.8xlarge: 5000
- db.r4.16xlarge: 6000
3. Max_connection 파라미터 변경 방법
Max_connection 값을 변경하기 위해서는 파라미터 그룹을 수정해야 합니다.
먼저, test를 위해 프리티어인 db.t2.micro 클래스를 사용하여 Mysql 8.0.23버전의 RDS를 생성하였습니다.
-
기본 파라미터 그룹 확인
RDS가 생성되면, Mysql 엔진에 맞는 기본 파라미터 그룹이 자동으로 생성되어 적용됩니다.
기본 파라미터 그룹의 max_connections 값을 콘솔에서 확인해보면 {DBInstanceClassMemory/12582880} 으로 설정되어 있습니다.
Mysql에 직접 접속해서 max_connection 값을 확인하면, 앞서 말씀드린 것 처럼 db.t2.micro 인스턴스의 기본값인 66으로 설정 되어 있는 것을 확인할 수 있습니다.
$ mysql -u admin -p -h parametertest.cslhbb9jqvu2.ap-northeast-2.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 8.0.23 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 66 | +-----------------+-------+ 1 row in set (0.00 sec)
? 실제 db.t2.micro 인스턴스의 사양으로 계산을 해보면, 102410241024 / 12582880 = 85.3으로 최대 연결 수는 85로 설정되어야 하나, 66으로 표시됩니다.
이처럼 최대 DB 연결 수보다 적은 수가 표시될 수 있습니다. 이는 잠재적인 메모리 부족 문제를 방지하기 위한 것입니다. -
기본 파라미터 그룹 수정
기본 파라미터 그룹은 수정할 수 없으며 사용자 지정 파라미터 그룹을 생성하고 파라미터를 변경한 다음 새 파라미터 그룹을 사용하도록 인스턴스를 수정해야 합니다.
만약 max_connection 값을 수정하기 위해 기본 파라미터 그룹에서 값을 수정하면 아래와 같은 에러가 발생합니다.
-
새로운 파라미터 그룹 생성
새로운 파라미터 그룹을 생성하여 max_connection 값에 원하는 설정값을 넣어줍니다.
파라미터 그룹 패밀리는 해당하는 db 엔진으로 맞춰주시길 바랍니다.
기본 66에서 100으로 변경하는 test를 진행하겠습니다.
이후 변경 사항 적용을 눌러 새로운 파라미터 그룹을 생성합니다.
-
새로운 파라미터 그룹 적용
해당하는 RDS의 수정을 선택하여 방금 생성한 변경된 값이 있는 새로운 DB 파라미터 그룹으로 변경해줍니다.
이후 "즉시 적용" 을 선택하신 후 DB 인스턴스 수정을 선택하시면 새로운 파라미터 그룹으로 적용됩니다.
-
DB 인스턴스 재 시작
DB 인스턴스 수정 후 RDS 구성 탭에서 파라미터 그룹을 확인하시면 아래와 같이 재시작 보류중 이라는 메세지를 확인하실 수 있습니다.
파라미터 그룹을 변경하신 뒤에는 반드시 수동으로 DB 인스턴스를 재시작 해주어야 새로운 파라미터 그룹이 적용됩니다.
위와 같이 DB 인스턴스를 재시작 하신 후 DB에 접속하여 확인하면 max_connections 값이 정상적으로 변경된 것을 확인하실 수 있습니다.
MySQL [(none)]> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 100 | +-----------------+-------+ 1 row in set (0.00 sec)
-
max_connections 값 변경
새로운 파라미터 그룹을 적용하신 후, max_connections 값을 변경하고 싶으면, 간단하게 파라미터 그룹의 새로운 값으로 변경해주시면 됩니다.
기본 그룹이 아니라 파라미터 그룹에서 변경 가능하며, max_connections 파라미터의 적용 유형은 "dynamic"으로 즉시 적용을 선택하지 않으셔도 바로 변경되어 반영됩니다.
이와 같이 새로운 "120" 이라는 값으로 파라미터 값을 수정해준 후 db에 접속하여 확인합니다.
MySQL [(none)]> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 120 | +-----------------+-------+ 1 row in set (0.00 sec)
인스턴스 재 시작, 즉시 적용과 상관없이 바로 반영되는 것을 확인하실 수 있습니다.
감사합니다.