구조 및 데이터 관리/DB

MySQL - too many connections error 관련 처리

개발참치 2021. 9. 12.

문제

MySQL 관련 DB 구동 중

 

 

관련 에러가 발생하였습니다.

 

DB 관련 접속을 해보니, 

 

Connection 접속 에러

 

too many connections 이라면서 에러가 발생합니다.

 

 

분석

 

DB의 커넥션 개수가 정해진 최댓값보다 많아져서 나타나는 에러입니다.

 

show variables like 'max_connections';

 

위 명령어를 통하여 max_connections를 알아볼 수 있으며 

 

Default = 151개입니다.

 

즉, DB의 커넥션 개수가 151개 이상일 때 나타나는 에러입니다.

 

 

해결

 

제일 좋은 해결책은 Service를 다른 DB를 통하게끔 Connections 설정하는 것이지만 어렵다면,

설정을 통해 해결이 가능합니다.

 

Service 설정을 통한 해결

 

DB의 커넥션 개수를 Service의 사용량이 초과해서 생긴 문제이지만,

DB의 설정을 바꾸는 것보다는 Service의 내부의 설정을 바꾸는 것을 권장합니다.

 

만일 Service의 사용량이 그리 많지 않다면, DB와의 연결 설정을 파악하여 바꿔줍니다.

 

보통 Spring Boot의 경우 DB와의 커넥션 MAX 설정과 MIN 설정 모두 Defatult = 10개입니다.
= Spring Boot의 DB connection 설정을 하지 않았을 경우 DB Connection 개수는 10개입니다.

 

  • Spring Boot의 Max Connection 개수인 spring.datasource.tomcat.maxActive를 설정해주고 10 -> 5
  • 최대 연결 유지 시간인 spring.datasource.tomcat.max-wait 를 변경해줍니다.

 

Spring boot 설정 변경 사진

 

이렇게 각 서비스의 DB Connection 설정들을 각각 변경해주며, 혹시나 Connection이 종료돼도 유지하고 있는 서비스가 있는지 확인합니다.

 

 

DB 설정을 통한 해결

 

서비스의 설정이 어렵다면, DB 설정을 통하여 바꿔줍니다.

 

단순히 Connections의 수가 많다면 Connections 최대 수를 변경해주면 되며,

파악이 어렵다면 max_connections를 늘리기보다는 connections 의 연결 유지 시간인 wait_timeout을 수정하는 걸 권장드립니다.

 

 

my.cnf 설정파일의 해당 부분을 변경 (linux 기준 /etc/my.cnf) 

 

wait_timeout = 300

max_connections = 60

 

또는 

 

mysql 서버로 접속하여 설정 변경할 수도 있습니다.

 

mysql> set global max_connections=300;
mysql> set wait_timeout=60;

 

'구조 및 데이터 관리 > DB' 카테고리의 다른 글

MySQL Only Full Group By 에러 관련  (0) 2021.07.12

댓글