8.11.5.1 MySQL 클라이언트 연결을위한 스레드의 사용 방법
연결 관리자 스레드는 서버가 대기하고있는 네트워크 인터페이스에서 클라이언트의 연결 요청을 처리합니다. 모든 플랫폼에서 하나의 관리자 스레드가 TCP / IP 연결 요청을 처리합니다. Unix에서는이 관리자 스레드는 Unix 소켓 파일의 연결 요청도 처리합니다. Windows에서는 하나의 관리자 스레드가 공유 메모리 연결 요청을 처리하고 다른 매니저 스레드가 명명 된 파이프 연결 요청을 처리합니다. 서버가 대기하고 있지 않는 인터페이스를 처리하기위한 스레드를 생성하지 않습니다. 예를 들어, Windows 서버에서 명명 된 파이프 연결 지원이 활성화되어 있지 않은 경우 이러한 연결을 처리하는 스레드는 생성되지 않습니다.
연결 관리자 스레드는 각 클라이언트 연결을 그 연결의 인증 및 요청을 처리하는 전용 스레드에 연결합니다. 관리자 스레드는 필요에 따라 새로운 스레드를 생성하지만 먼저 스레드 캐시를 조사해 연결에 사용할 수있는 스레드가 포함되어 있는지를 확인하여 그것을 해결하는 것을 시도합니다. 연결이 완료되면 스레드 캐시가 가득 않으면 그 스레드가 스레드 캐시에 반환됩니다.
이 연결 스레드 모델은 현재 연결된 클라이언트와 동일한 수의 스레드가 존재하고 다수의 연결을 처리하는 서버의 워크로드를 확대 할 필요가있는 경우에는 몇 가지 단점이 있습니다. 예를 들어, 스레드의 생성과 소멸의 부하가 커집니다. 또한 각 스레드 스택 영역 등의 서버 리소스와 커널 리소스가 필요합니다. 많은 동시 연결을 지원하려면 스레드 당 스택 크기는 작게 유지해야 그것이 너무 작아하거나 서버에서 대량의 메모리를 소비하게되는 상황이 생깁니다. 다른 리소스가 부족할 수도 스케줄링 오버 헤드가 커질 가능성이 있습니다.
MySQL 5.6.10 현재 MySQL 5.6의 상용 배포는 오버 헤드를 줄이고 성능을 향상하도록 설계되어 대체 스레딩 모델을 제공하는 팔찌 수영장 플러그인이 포함되어 있습니다. 이것은 다수의 클라이언트 연결 문 실행 스레드를 효율적으로 관리하여 서버의 성능을 향상시킬 스레드 풀을 구현합니다. 섹션 8.11.6 "스레드 풀 플러그인" 을 참조하십시오.
클라이언트 연결을 처리하는 스레드를 서버가 어떻게 관리할지 여부를 제어하고 모니터하려면 몇 가지 시스템 변수와 상태 변수가 관련이 있습니다. ( 섹션 5.1.4 "서버 시스템 변수" 및 섹션 5.1.6 "서버 상태 변수" 를 참조하십시오.)
스레드 캐시는 thread_cache_size
시스템 변수에 의해 결정되는 크기를 가지고 있습니다. 기본값은 0 (캐시 없음),이 경우 스레드는 새로운 연결마다 설치되고 연결이 종료되면 소멸됩니다. thread_cache_size
를 N
으로 설정하고 N
개의 비활성 연결 스레드를 캐시 할 수 있도록합니다. thread_cache_size
서버를 시작할 때 설정하거나 서버의 실행 중에 변경할 수 있습니다. 연결되어 클라이언트 연결이 완료되면 연결 스레드는 비활성화됩니다.
캐시의 스레드 및 스레드를 캐시에서 검색 할 수 없기 때문에 생성 된 스레드 수를 모니터하려면 Threads_cached
및 Threads_created
상태 변수를 모니터합니다.
서버 시작시 또는 실행시 max_connections
를 설정하여 동시에 연결할 수있는 클라이언트의 최대 수를 제어 할 수 있습니다.
스레드 스택이 너무 작 으면이를 통해 서버가 처리 할 수있는 SQL 문 복잡성, 저장 프로 시저의 재귀 깊이 및 기타 메모리를 많이 사용하는 작업이 제한됩니다. 각 스레드에 N
바이트의 스택 크기를 설정하려면 서버를 --thread_stack=
으로 시작합니다. N