Loading...
MySQL 9.5 Reference Manual 9.5의 17.8.4 Configuring Thread Concurrency for InnoDB의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB는 운영 체제 스레드를 사용하여 사용자 트랜잭션으로부터의 요청을 처리합니다. (트랜잭션은 커밋 또는 롤백하기 전에 InnoDB에 대해 여러 요청을 발생시킬 수 있습니다.) 컨텍스트 스위칭이 효율적인 멀티코어 프로세서를 가진 최신 운영 체제와 서버에서는, 대부분의 워크로드가 동시 스레드 수에 대한 어떤 제한도 없이 잘 동작합니다.
스레드 사이의 컨텍스트 스위칭을 최소화하는 것이 도움이 되는 상황에서, InnoDB는 동시에 실행 중인 운영 체제 스레드 수(따라서 한 번에 처리되는 요청의 수)를 제한하기 위해 여러 가지 기법을 사용할 수 있습니다. InnoDB가 사용자 세션으로부터 새로운 요청을 수신할 때, 동시에 실행 중인 스레드 수가 사전에 정의된 한계에 도달해 있으면, 새 요청은 다시 시도하기 전에 잠시 슬립 상태가 됩니다. 락을 기다리는 스레드는 동시에 실행 중인 스레드 수에 포함되지 않습니다.
innodb_thread_concurrency 설정 변수를 설정하여 동시 스레드 수를 제한할 수 있습니다. 실행 중인 스레드 수가 이 한계에 도달하면, 추가 스레드는 큐에 배치되기 전에 innodb_thread_sleep_delay 설정 변수로 설정된 마이크로초 단위 시간만큼 슬립 상태가 됩니다.
innodb_adaptive_max_sleep_delay 설정 옵션을 innodb_thread_sleep_delay에 허용하고자 하는 최댓값으로 설정할 수 있으며, InnoDB는 현재 스레드 스케줄링 작업에 따라 innodb_thread_sleep_delay를 자동으로 상향 또는 하향 조정합니다. 이러한 동적 조정은 시스템 부하가 가벼운 시기와 거의 최대 용량으로 동작하는 시기 모두에서 스레드 스케줄링 메커니즘이 원활하게 동작하도록 돕습니다.
innodb_thread_concurrency의 기본값과, 그에 의해 암묵적으로 결정되는 동시 스레드 수에 대한 기본 제한은 MySQL과 InnoDB의 여러 릴리스에서 변경되어 왔습니다. innodb_thread_concurrency의 기본값은 0이며, 따라서 기본적으로 동시에 실행되는 스레드 수에는 제한이 없습니다.
InnoDB는 동시 스레드 수가 제한되는 경우에만 스레드를 슬립 상태로 전환합니다. 스레드 수에 제한이 없으면, 모든 스레드는 스케줄러에 의해 동일하게 경쟁하게 됩니다. 즉, innodb_thread_concurrency가 0이면, innodb_thread_sleep_delay의 값은 무시됩니다.
스레드 수에 제한이 있는 경우(innodb_thread_concurrency > 0일 때), InnoDB는 단일 SQL statement 의 실행 중에 발생하는 여러 요청이 innodb_thread_concurrency에 의해 설정된 제한을 따르지 않고 InnoDB에 진입하도록 허용함으로써 컨텍스트 스위칭 오버헤드를 줄입니다. 조인과 같은 SQL statement는 InnoDB 내에서 여러 행 작업으로 구성될 수 있으므로, InnoDB는 스레드가 최소한의 오버헤드로 반복적으로 스케줄러에 의해 선택될 수 있도록 일정 개수의 “티켓”을 할당합니다.
새 SQL statement가 시작될 때, 스레드는 티켓을 가지고 있지 않으며, innodb_thread_concurrency를 따라야 합니다. 스레드가 InnoDB에 진입할 자격을 얻게 되면, 행 작업을 수행하기 위해 이후에 InnoDB에 진입하는 데 사용할 수 있는 일정 수의 티켓이 할당됩니다. 티켓이 소진되면, 스레드는 축출되고, innodb_thread_concurrency가 다시 적용되어 스레드를 선입선출(FIFO) 대기 스레드 큐로 되돌려 놓을 수 있습니다. 스레드가 다시 InnoDB에 진입할 자격을 얻게 되면, 티켓이 다시 할당됩니다. 할당되는 티켓 수는 기본값이 5000인 전역 옵션 innodb_concurrency_tickets에 의해 지정됩니다. 락을 기다리던 스레드는 락을 사용할 수 있게 되면 티켓 한 개를 부여받습니다.
이 변수들의 올바른 값은 환경과 워크로드에 따라 달라집니다. 여러 가지 서로 다른 값 범위를 시도하여, 여러분의 애플리케이션에 적합한 값을 결정하십시오. 동시에 실행 중인 스레드 수를 제한하기 전에, innodb_adaptive_hash_index와 같이 멀티코어 및 멀티프로세서 컴퓨터에서 InnoDB의 성능을 향상시킬 수 있는 설정 옵션을 검토하십시오.
MySQL 스레드 처리에 대한 일반적인 성능 정보는 Section 7.1.12.1, “Connection Interfaces”를 참조하십시오.
17.8.3 InnoDB Buffer Pool Configuration
17.8.5 Configuring the Number of Background InnoDB I/O Threads