[MySQL][Parameter] back_log
- Databases/MySQL
- 2023. 2. 24.
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
'Databases > MySQL' 카테고리의 다른 글
[MySQL] 서버 자동 환경 설정(MySQL 8.0) (0) | 2023.03.19 |
---|---|
[MySQL] 리눅스의 파일 열기 갯수 변경 및 자원 제한 확인 (0) | 2023.03.19 |
[MySQL][Parameter] 다양한 Read Only 파라미터 (0) | 2023.02.16 |
[MySQL] [MHA] 03. MHA 테스트 및 Failover (0) | 2022.10.02 |
[MySQL] [MHA] 02. MHA 환경설정 및 설치 (0) | 2022.10.02 |