[MySQL][InnoDB] 스레드 동시성 설정
- Databases/MySQL
- 2020. 6. 2.
InnoDB는 운영 체제 스레드를 사용하여 사용자 트랜잭션의 요청을 처리합니다.(트랜잭션은 커밋 또는 롤백하기 전에 InnoDB에 많은 요청을 발행 할 수 있습니다.) 컨텍스트 전환이 효율적인 멀티 코어 프로세서가 있는 최신 운영 체제 및 서버에서는 대부분의 워크로드가 동시 스레드 수에 제한없이 잘 실행됩니다. MySQL 5.5 이상의 확장성 향상은 InnoDB 내에서 동시에 실행되는 스레드 수를 제한 할 필요성을 줄입니다.
스레드간 컨텍스트 전환을 최소화하는 것이 도움이되는 상황에서 InnoDB는 여러 가지 기술을 사용하여 동시에 실행중인 운영 체제 스레드 수 (한 번에 처리되는 요청 수)를 제한 할 수 있습니다. InnoDB가 사용자 세션으로부터 새 요청을 수신 할 때 동시에 실행중인 스레드 수가 사전 정의 된 한계에 도달하면 새 요청은 잠깐 동안 대기 한 후 다시 시도합니다. 일정 대기 후 재조정할 수 없는 요청은 선입 선출 대기열에 들어가고 결국은 처리됩니다. 잠금을 대기중인 스레드는 동시에 실행중인 스레드 수에 포함되지 않습니다.
구성 매개 변수 innodb_thread_concurrency를 설정하여 동시 스레드 수를 제한 할 수 있습니다. 실행 스레드 수가 이 한계에 도달하면 추가 스레드는 큐에 배치되기 전에 구성 매개 변수 innodb_thread_sleep_delay에 의해 설정된 몇 마이크로 초 동안 대기 상태가됩니다.
이전에는 innodb_thread_sleep_delay에 대한 최적의 값을 찾기위한 테스트가 필요했으며 작업량에 따라 최적의 값이 변경 될 수 있었습니다. MySQL 5.6.3 이상에서는 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 문을 실행하는 동안 작성된 여러 요청이 innodb_thread_concurrency에 의해 설정된 제한을 준수하지 않고 InnoDB에 들어갈 수 있도록하여 컨텍스트 전환 오버 헤드를 줄입니다. SQL 문 (예 : 조인)은 InnoDB 내에서 여러 행 작업을 포함 할 수 있으므로 InnoDB는 스레드를 최소한의 오버 헤드로 반복해서 예약 할 수 있도록 지정된 수의 "티켓"을 할당합니다.
새 SQL 문이 시작되면 스레드에 티켓이 없으며 innodb_thread_concurrency를 관찰해야합니다. 스레드가 InnoDB에 참여할 수있는 권한이 부여되면 이후 InnoDB에 들어가 행 작업을 수행하는 데 사용할 수있는 여러 티켓이 할당됩니다. 티켓이 소진되면 스레드가 제거되고 innodb_thread_concurrency가 다시 관찰되어 스레드가 대기중인 스레드의 선입 선출 큐에 다시 배치 될 수 있습니다. 스레드에 다시 InnoDB를 입력 할 수있는 권한이 있으면 티켓이 다시 할당됩니다. 할당된 티켓 수는 글로벌 옵션 innodb_concurrency_tickets에 의해 지정되며 기본적으로 5000입니다. 잠금을 대기중인 스레드는 잠금이 사용 가능해지면 하나의 티켓을 받습니다.
이러한 변수의 올바른 값은 환경 및 작업 부하에 따라 다릅니다. 다양한 값을 사용하여 응용 프로그램에 적합한 값을 결정해야 합니다. 동시에 실행되는 스레드 수를 제한하기 전에 innodb_adaptive_hash_index와 같은 다중 코어 및 다중 프로세서 컴퓨터에서 InnoDB의 성능을 향상시킬 수있는 구성 옵션을 검토합니다.
※도움이 되셨다면 광고클릭 한번 부탁드립니다.※
'Databases > MySQL' 카테고리의 다른 글
[MySQL][InnoDB] 옵티마이저 통계 설정 (0) | 2020.06.05 |
---|---|
[MySQL][InnoDB] I/O설정 (0) | 2020.06.02 |
[MySQL][InnoDB] Buffer Pool 플러싱(Flushing) (0) | 2020.05.31 |
[MySQL][InnoDB] 버퍼풀 설정 (2) | 2020.05.27 |
[MySQL][InnoDB] Double Write buffer, Undo Log, Redo Log (0) | 2020.05.23 |