[Mysql] Too Many Connection error 및 Processlist

ym·2022년 6월 28일
0

database

목록 보기
1/1
post-thumbnail

mysql로 작업하다보면 빈번하게 발생하는 에러이며,

process list에 대하여 정리가 필요하여 정리를 시작해본다.

😵‍💫 쿼리로 상태 확인해보기

첫번째로 mysql에 접속한 후

mysql > show processlist

해당 명령어를 통해 실행되고있는 SQL문 리스트를 확인해본다

(위의 명령어는 100개까지 노출되고 전체 리스트를 보고싶음 full로 확인)

👩🏻‍💻 Show Processlist 컬럼 comment

실행중인 프로세스 확인 후

show variables like "%max_connections%";

해당 명령어로 max connections를 확인해본다.

서비스의 실행중인 프로세스는 74개였고, max 값은 75개였다.

일단, 작동하고있는 process 중 내 ip로 확인되는 것들은 모두 Kill로 죽여놓았다. (당장 서버에서의 디비 접근이 안됐었음)

  • process를 강제 종료하는 명령어는
mysql > kill [processid]

🤝 이슈 해결방법

첫 번째로 떠오른 방법은, max_connection 개수를 늘리는 방법이다.

-- 임시 세팅 방법
mysql > set global max_connections=100;

-- 영구적 변경 방법 (파일 변경)
[mysqld]
max_connections = 500

사용하고 있는 서버의 cpu, ram의 여유공간이 넉넉해서 늘려도 되지만, 해당 방법으로는 근본적인 이슈가 해결이 되지 않았다.

현재 서버에 붙여서 테스트하는 수가 많았고 스래드가 종료되기 까지의 time이 길었다.

두 번째 방법 wait_timeout 변경하기

wait_timeout은 API를 이용한 client 프로그램 상에서 최대 연결시간을 뜻한다.

설정한 시간 동안 요청이 없으면 연결이 취소되고 다시 요청이 들어오면 자동으로 연결이 된다.

해당 기본 값이 28800초 였기 때문에.. 해당 값을 변경하는 것으로 이슈를 해결하기로 하였다.

테스트하는 서버였기 때문에 500초로 변경하였다.

설정 확인방법

-- 글로벌 설정 확인
mysql> show global variables like '%timeout';

-- session 설정 확인
mysql> show variables like '%timeout';

설정 변경 방법

-- 임시 설정 (재부팅시 제거)
mysql> set global interactive_timeout=10;

mysql> set global wait_timeout=10;

mysql> set interactive_timeout=10;

mysql> set wait_timeout=10;
-- 설정파일 변경
[mysqld]

interactive_timeout=10

wait_timeout=10

아 추가로 interactive_timeout 은 콘솔이나 터미널 모드(대화형 클라이언트)에서 mysqld와 client가 연결을 맺은 다음 요청을 기다리는 최대시간이다.

profile
개발을 즐기기 위해 공부하는 백앤드 개발자

0개의 댓글