MySQL, MariaDB

MySQL/MariaDB max_connection 개수와 성능

SungWookKang 2019. 3. 24. 10:32
반응형

MySQL/MariaDB max_connection 개수와 성능

 

·      Version : MySQL 5.7

 

MySQL / MariaDB 에서 mysqld 서버에 연결하려고 할때, Too many connections 오류가 발생하면 사용 가능한 모든 연결이 다른 클라이언트에 의해 사용중임을 의미한다. 만약Too many connections 같은 커넥션 오류가 발생한다면 시스템 변수를 수정하여 커넥션 개수를 늘릴 있다. 아래 스크립트로 즉시 늘릴 있다.

set global max_connections = 200;

 

현재 연결되어 있는 연결수는 아래 스크립트로 확인 있다.

show status like 'threads_connected';

 

max_connections 값에 대한 고정된 규칙은 없지만 극도로 높은 값은 시스템 성능에  좋지 않다. 일부 잠금 조건이나 속도가 느린경우 모든 연결에 대해서 엄청난 경합을 발생시키기 때문에 문제가 있다. 임시/메모리 테이블을 사용하는 활성 연결의 경우 메모리 사용량이 높아질 있다.

 

·       MySQL/MariaDB Connection 관련 설정 변수 : http://sqlmvp.kr/220370360735

 

MySQL 지원하는 최대 연결 수는 플랫폼의 스레드 라이브러리 품질, 사용 가능한 RAM, 연결에 사용되는 RAM, 연결의 작업량 원하는 응답시간에 따라 다르다. Linux 또는 Solaris 일반적으로 500~ 1000개의 동시 연결을 지원하고 최대 10,000개의 연결을 지원할수 있다. Windows 플랫폼에서는 Posix 호환성으로 (open table X 2 + open connections) < 2048 제한된다.

 

MySQL 새로운 연결이 만들어지면 back_log(https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_back_log) 값이 저장된다. 이는 효과적으로 MySQL 순간적인 요청을 처리 있도록 운영체제 크기에서 새로운 연결을 위한 대기역 역할을 한다. MySQL기본 back_log 값은 버전에 따라 다르므로 공식 문서를 참고 한다.( 링크) MySQL 5.7 에서는 기본값이 900 이며 아래 수식을 기반으로 한다.

50 + (max_connections / 5)

 

커넥션 개수를 늘릴때 thread_cache 값도 영향을 미친다. 값을 설정 할때 초당 2 이상의 스레드가 생성되지 않도록 주의 한다. 대부분의연결 수가 많은 경우는 클라이언트에서 연결을 제대로 닫지 못하거나 잘못된 디자인으로 인해 mysql 처리기를 닫기 전에 다른 작업을 수행하는 경우가 많다. 응용프로그램이 연결을 제대로 닫지 못하는 경우 wait_timeout 설정하여 사용되지 않거나 유휴상태의 연결을 조절하여 MySQL 서버에 대한 활성 연결 수를 최소화 있다.

 

아래 그림은 벤치마크 자료로 커넥션수와 요청의 성능 관계를 나타낸다.


 

[참고자료]

·       https://dev.mysql.com/doc/refman/5.7/en/too-many-connections.html

·       https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_back_log

·       https://www.percona.com/blog/2012/01/06/mysql-high-number-connections-per-secon/

·       https://www.mysql.com/why-mysql/benchmarks/

 

2017-10-18 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, MariaDB, max_connection, Too many connections error,







반응형