본문 바로가기

프로그래밍/DBMS

[MySQL / MariaDB] Connection 모니터링

MySQL/MariaDB Connection 모니터링

 

  • Version : MySQL 5.7.21, Ubuntu 16.0.4

 

MySQL 서버에서 connection 모니터링 하는 방법에 대해서 알아본다. MySQL 뿐만 아니라 다른 데이터베이스에서도 connections의 수는 운영과 성능면에서 매우 중요하다. 특히 connection의 개수가 max_connections 값을 초과할 경우 새로운 connection이 할당되지 못하여 어플리케이션이 MySQL 서버에 연결되지 않아 오류가 발생할수 있다. 또한 신규 connection이 할당 될때, 그에 따른 메모리 할당 및 기타 작업이 동반되기 때문에 빈번한 connection 연결 및 해제는 여러가지 성능 문제와도 관련이 있다.

 

MySQL에서 connection에 대한 모니터링을 하려면 전역 시스템 변수 및 전역 상태 변수를 함께 살펴보아야 한다. 아래 스크립트를 실행하면connection과 관련된전역 변수의 설정값을 확인 할 수 있다.

show variables where variable_name in (

'max_connections',

'max_user_connections'

)

 

 

Variable Name

Comment

Max_connections

현재 설정된 최대 동시 연결 수

Max_user_connections

계정당 생성할 수 있는 최대 동시 연결 수

 

 

아래 스크립트는 젼역 상태 변수로 connection과 관련된 현재값을 확인 할 수 있다.

show status where variable_name in (

'max_used_connections',

'aborted_clients',

'aborted_connects',

'threads_connected',

'connections'

);

 

 

Variable Name

Comment

Max_used_connections

동시 최대 접속자 수

Aborted_clients

연결된 상태에서 강제로 연결 해제 된 연결 수

Aborted_connects

연결 과정 중 fail된 연결 수

Threads_connected

현재 오픈된 연결 수

connections

연결 시도된 총 수

 

현재 사용중인 connection의 사용 비율은 아래와 같은 공식으로 확인 할 수 있다.

Connection Usage(%) = (Threads_conneted / max_connections) * 100

 

위에서 언급 하였듯이 연결된 커넥션의 수가 max_connections 값을 초과 할 경우 커넥션을 할당 받지 못해서 연결 오류가 발생한다. 커넥션 수가 증가하는 원인에는 정상적인 서비스 요청이 증가하여 커넥션이 증가할 수 있지만 일부 비효울 적인 쿼리로 인해 특정 세션에서 대기나 잠금이 발생하여 리소스가 대기할 경우 새로운 요청에 대해서는 새로운 커넥션이 할당되어 연결되므로 연결 수가 증가할 수 있다. 그래서 커넥션 수를 모니터링 할때 리소스에 대한 모니터링을 함꼐 해야 한다.

 

max_connection커넥션의 수를 변경할 때는 서비스에 필요한 최대 연결수 값 이상으로 설정해야 한다. OLTP 서버에서는 시간마다 요청수가 다르기 때문에 (서비스 요청이 몰리는 시간과 그렇지 않은 시간에 대한 커넥션 수 차이가 크다.) 최대한 서비스가 가장 바쁜 시간대의 값보다 크게 설정해야 한다.

 

아래 공식은 강제로 연결이 취소된 비율인데, 특정 세션에서 일정 시간이상동안 요청이 없다면 MySQL서버는 강제로 연결을 해제 한다. 이 비율이 높다면 wait_timeout 값의 조정이 필요 할 수 있다.

Aborted connection usage(%) = (aborted_clients / connections) * 100

 

 

[참고자료]

 

2018-04-05 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, connection, 커넥션 모니터링, max_connections, connection monitoring, DBA, MySQL 운영, aborted_cilent, max_user_connections, max_used_connections