MySQL 성능 최적화에는 여러 측면이 포함됩니다. 이 기사에서는 MySQL의 일부 주요 매개변수를 설명합니다. 이러한 매개변수는 어느 정도 MySQL 데이터베이스의 성능을 결정하는 핵심 매개변수입니다. MySQL 성능 최적화와 관련된 데이터베이스 관리 및 개발 중에 성능 문제가 자주 발생합니다. 인터넷에서 정보를 검색하고 저자 자신의 시도를 통해 다음과 같은 시스템 매개 변수가 더 중요하다고 생각합니다.
주요 매개변수 1: back_log
MySQL이 보유해야 하는 연결 수입니다. 이는 메인 MySQL 스레드가 짧은 시간 내에 많은 연결 요청을 받은 후, 메인 스레드가 연결을 확인하고 새 스레드를 시작하는 데 약간의 시간이 걸릴 때 작동합니다.
back_log 값은 MySQL이 일시적으로 새 요청에 대한 응답을 중지하기 전에 짧은 시간 동안 스택에 저장할 수 있는 요청 수를 나타냅니다. 짧은 시간 내에 많은 연결이 예상되는 경우에만 연결을 늘려야 합니다. 즉, 이 값은 들어오는 TCP/IP 연결에 대한 청취 대기열의 크기입니다. 운영 체제에는 이 대기열 크기에 대한 자체 제한이 있습니다. back_log를 운영 체제 제한보다 높게 설정하려고 해도 아무런 효과가 없습니다.
호스트 프로세스 목록을 관찰하고 인증되지 않은 사용자 | xxx.xxx.xxx | NULL | 연결 | NULL | NULL 프로세스를 찾으면 back_log 값을 늘려야 합니다. 기본값은 50인데 저는 500으로 변경했습니다.
주요 매개변수 2: Interactive_timeout
서버가 대화형 연결을 닫기 전에 해당 연결에 대한 작업을 기다리는 시간(초)입니다. 대화형 클라이언트는 mysql_real_connect()에 대한 CLIENT_INTERACTIVE 옵션을 사용하는 클라이언트로 정의됩니다. 기본값은 28800인데, 저는 7200으로 변경했습니다.
주요 매개변수 3: key_buffer_size
인덱스 블록은 모든 스레드에 의해 버퍼링되고 공유됩니다. key_buffer_size는 인덱스 블록에 사용되는 버퍼 크기입니다. 인덱스를 더 잘 처리하려면(모든 읽기 및 다중 쓰기에 대해) 여유가 있는 만큼 늘리십시오. 너무 크게 만들면 시스템이 페이징을 시작하고 속도가 정말 느려집니다. 기본값은 8388600(8M)이고, 제 MySQL 호스트의 메모리가 2GB이므로 402649088(400MB)로 변경했습니다.
주요 매개변수 4: max_connections
허용되는 동시 클라이언트 수입니다. 이 값을 늘리면 mysqld에 필요한 파일 설명자 수가 늘어납니다. 이 숫자를 늘려야 합니다. 그렇지 않으면 너무 많은 연결 오류가 자주 표시됩니다. 기본값은 100인데 1024로 변경했습니다.
주요 매개변수 5: Record_buffer
순차 스캔을 수행하는 각 스레드는 스캔하는 각 테이블에 대해 이 크기의 버퍼를 할당합니다. 순차 스캔을 많이 수행하는 경우 이 값을 늘리는 것이 좋습니다. 기본값은 131072(128K)인데 16773120(16M)으로 변경했습니다.
주요 매개변수 6: sort_buffer
정렬해야 하는 각 스레드에는 이 크기의 버퍼가 할당됩니다. 이 값을 늘리면 ORDER BY 또는 GROUP BY 작업 속도가 빨라집니다. 기본값은 2097144(2M)인데, 저는 16777208(16M)로 변경했습니다.
주요 매개변수 7: table_cache
모든 스레드에 대해 열려 있는 테이블 수입니다. 이 값을 늘리면 mysqld에 필요한 파일 설명자 수가 늘어납니다. MySQL에는 각각의 고유한 열린 테이블에 대해 2개의 파일 설명자가 필요합니다. 기본값은 64인데 512로 변경했습니다.
주요 매개변수 8: thread_cache_size
재사용할 수 있는 저장된 스레드 수입니다. 존재하는 경우 캐시에서 새 스레드를 가져오고, 연결이 끊어졌을 때 공간이 있으면 클라이언트의 스레드를 캐시에 배치합니다. 새 스레드가 많은 경우 이 변수 값을 사용하여 성능을 향상시킬 수 있습니다. Connections 및 Threads_created 상태의 변수를 비교하면 이 변수의 역할을 확인할 수 있습니다. 저는 80으로 설정했습니다.
주요 매개변수 9: wait_timeout
서버가 연결을 닫기 전에 연결에 대한 작업을 기다리는 시간(초)입니다. 기본값은 28800인데, 저는 7200으로 변경했습니다.
참고: 매개변수 조정은 /etc/my.cnf 파일을 수정하고 MySQL을 다시 시작하여 수행할 수 있습니다. 이는 비교적 조심스러운 작업이며, 위의 결과는 단지 제 의견 중 일부일 뿐입니다. 호스트의 하드웨어 조건(특히 메모리 크기)에 따라 추가로 수정할 수 있습니다.