[MySQL][Parameter] back_log

MySQL 서버 변수중 back_log라는 시스템 변수가 있습니다.

이 변수는 MySQL 커넥션 성능과 굉장히 밀접한 관련이 있는데 OS 커널파라미터중 네트워크와 밀접한 관련이 있습니다.

이 시스템 변수에 대해 알아보겠습니다.

 

서버 변수 back_log 대한 설명

MySQL 가질 있는 미해결 연결 요청 수 입니다. MySQL 스레드가 매우 짧은 시간에 매우 많은 연결 요청을 받을 작동합니다.

그런 다음 메인 스레드가 연결을 확인하고 스레드를 시작하는 약간의 시간(아주 짧지만)이 걸립니다.

back_log 값은 MySQL 일시적으로 요청에 대한 응답을 중지하기 전에 짧은 시간 동안 쌓일 있는 요청 수를 나타냅니다.

단기간에 많은 수의 연결이 예상되는 경우에만 값을 늘려야 합니다.

 

, 값은 들어오는 TCP/IP 연결에 대한 듣기(listen) 대기열의 크기입니다. 운영 체제에는 대기열의 크기에 대한 자체 제한이 있습니다.

Unix listen() 시스템 호출에 대한 매뉴얼 페이지에 자세한 내용이 있습니다. 변수의 최대값은 OS 설명서를 확인하십시오. back_log 운영 체제 제한보다 높게 설정할 없습니다.

 

기본값은 max_connections 값으로, 허용된 백로그가 최대 허용 연결 수로 조정되도록 합니다.

 

관련 OS 파라미터

그렇다면 OS 파라미터의 어떤 내용과 관련이 있는지 살펴보겠습니다. OS 커널 파라미터중 당연히 네트워크와 관련이 깊습니다.

관련 파라미터들을 한번 확인해보겠습니다.

 

▶︎ somaxconn

client 연결 요청은 accept() 호출하기 전에 queue 쌓이게 됩니다. queue 작으면 client 연결 요청이 drop 있으므로 다음 항목을 크게 설정해 주어야 합니다.

• sysctl.conf

net.core.somaxconn = 65535

기본 설정값은 128 입니다.

 

▶︎ tcp_max_syn_backlog

TCP three way hand shaking 서버가 SYN 받으면 상태를 SYN_RECV 변경하며 queue 저장합니다.  tcp_max_syn_backlog 패킷을 쌓아두는 queue 크기로 너무 작으면 Syn flooding 공격등에 취약할 있고 동시에 client 연결을 시도할 경우 문제가 될수 있으므로 키워줍니다.

net.ipv4.tcp_max_syn_backlog = 30000

 

 

▶︎ tcp_syncookies

Syn cookies 설정되어 있으면 동일 client 에서 새로운 SYN 패킷을 받아도 syn backlog 큐에 쌓지 않습니다.

net.ipv4.tcp_syncookies = 1

 

 

▶︎ netdev_max_backlog

NIC(Network Interface Card) 에서 패킷이 들어오면 커널은 처리하기 전에 ring buffer 라는 큐에 쌓아 놓습니다. 값이 작을 경우 패킷이 dorp 될수 있으므로 적당한 값으로 키워줍니다.

net.core.netdev_max_backlog = 5000

 

이 파라미터들 중에서 중요하게 봐야 할 파라미터는 somaxconn, tcp_max_syn_backlog 2 입니다.

두가지가 MySQL back_log파라미터와 관련이 깊으며 켜넥션에 관련된 튜닝이 필요하다면 조절을 해보시는것을 추천드립니다.

 

 

파라미터 정보

설명
커맨드 라인 명령어 정보 --back-log=#
시스템 변수 back_log
범위 Global
동적여부 N
SET_VAR. 힌트 적용 여부 : No No
형식 Integer
기본값 -1 (자동크가. 리터럴값에 할당하면 안됩니다.)
최소값 1
최대값 65535

 

참고 URL

https://www.lesstif.com/lpt/linux-kernel-tuning-for-network-server-87949594.html

https://m.blog.naver.com/sory1008/220233937447

Designed by JB FACTORY