RDS max_connections 파라미터 변경 방법

고한나·2021년 7월 28일
1

서비스를 운영하다 보면 특정 이벤트 혹은 사용자 증가로 인해 max_connection 값을 증가시켜야 할 때가 있다.

이런 경우 보통 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 값을 증가시키기 보단, 인스턴스 스펙을 조정(인스턴스 타입 변경)해서 기본 값으로 사용하는 것을 추천한다.

위에서 언급했듯이, max_connections 값은 {DBInstanceClassMemory/12582880} 값으로 기본적으로 정의 되어 있다.
DBInstanceClassMemory 값은 DB 인스턴스에 사용할 수 있는 메모리 용량(바이트)을 나타내다보니 인스턴스 클래스에 영향을 받는다.

또한 Aurora MySQL과 RDS for MySQL DB 인스턴스의 메모리 오버헤드는 서로 다르다.
따라서 동일한 인스턴스 클래스를 사용하는 Aurora MySQL과 RDS for MySQL DB 인스턴스의 max_connections 값은 다를 수 있다.(처음에 나도 aurora 문서를 보고 rds 기본 값을 살펴보다가 이상해서 다시 문서를 찾아봤었다.. )

⏹️ 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 값을 변경하기 위해서는 DB 인스턴스에 연결 된 파라미터 그룹을 수정해야 한다.

먼저, test를 위해 프리티어인 db.t2.micro 클래스를 사용하여 Mysql 8.0.23버전의 RDS를 생성하였다.

1. 기본 파라미터 그룹 확인

RDS가 생성되면, Mysql 엔진에 맞는 기본 파라미터 그룹이 자동으로 생성되어 적용된다.

기본 파라미터 그룹의 max_connections 값을 콘솔에서 확인해보면 {DBInstanceClassMemory/12582880} 으로 설정되어 있는 것을 확인할 수 있다.

Bastion host에 mysql을 설치하고 생성한 db 인스턴스에 접속하여 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 인스턴스의 사양으로 계산을 해보면, 1024 x 1024 x 1024 / 12582880 = 85.3으로 최대 연결 수는 85로 설정되어야 하나, 66으로 표시된다.
이처럼 최대 DB 연결 수보다 적은 수가 표시될 수 있는데, 이는 잠재적인 메모리 부족 문제를 방지하기 위한 것이다.

2. 기본 파라미터 그룹 수정

기본 파라미터 그룹은 수정할 수 없으며 사용자 지정 파라미터 그룹을 생성하고 파라미터를 변경한 다음 새 파라미터 그룹을 사용하도록 인스턴스를 수정해야 한다.

만약 max_connection 값을 수정하기 위해 기본 파라미터 그룹에서 값을 수정하면 아래와 같은 에러가 발생하며 적용이 되지 않는다.

3. 새로운 파라미터 그룹 생성

[RDS] -> [파라미터] 에서 새로운 파라미터 그룹을 생성하여 max_connection 값에 원하는 설정값을 넣어주자.

파라미터 그룹 패밀리는 해당하는 db 엔진으로 맞춰주기.

새로운 파라미터 그룹의 max_connections 값을 기본 66에서 100으로 변경.

이후 변경 사항 적용을 눌러 새로운 파라미터 그룹을 생성하였다.

4. 새로운 파라미터 그룹 적용

해당하는 RDS의 [수정]을 선택하여 방금 생성한 변경된 값이 있는 새로운 DB 파라미터 그룹으로 변경한다.

이후 "즉시 적용" 을 선택하신 후 DB 인스턴스 수정을 선택하면 새로운 파라미터 그룹으로 적용된다.

5. 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)

6. 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)
HTML

인스턴스 재 시작, 즉시 적용과 상관없이 바로 반영되는 것을 확인할 수 있다.

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

감사해요. 재부팅수동으로 해야되군뇨

답글 달기