14.13.10 스핀 록 폴링 구성
InnoDB의 많은 상호 배타 락 이나 읽고 쓰기 락 은 짧은 시간 동안 예약됩니다. 멀티 코어 시스템에서 스레드가 절전 전에 상호 배타 락 또는 읽기 - 쓰기 잠금을 잠시 동안 취득 할 수 있을지 여부를 지속적으로 확인하면보다 효율적으로 할 수 있습니다. 이 폴링 기간 동안 상호 배타 락 또는 읽기 - 쓰기 잠금이 사용 가능하게 된 경우, 그 스레드는 같은 타임 슬라이스에서 즉시 계속할 수 있습니다. 그러나 공유 개체의 여러 스레드가 자주 폴링 으면 "캐시 탁구"가 발생하여 각 프로세서가 서로 캐시의 일부를 해제 할 수 있습니다. InnoDB는 이후 각 폴링 사이에 임의의 시간 기다림으로써이 문제를 최소화합니다. 이 지연은 바쁜 루프로 구현됩니다.
상호 배타 락 또는 읽기 - 쓰기 잠금 테스트 사이의 최대 지연은 매개 변수 innodb_spin_wait_delay
를 사용하여 제어 할 수 있습니다. 지연 루프의 기간은 C 컴파일러와 타겟 프로세서에 따라 다릅니다. (100MHz Pentium 시대이 지연 단위는 1 마이크로 초였습니다.) 모든 프로세서 코어가 빠른 캐시 메모리를 공유하는 시스템이 최대의 지연을 짧게하거나 innodb_spin_wait_delay=0
을 설정하고 바쁜 루프를 완전히 비활성화 할 수 있습니다. 여러 프로세서 칩을 갖춘 시스템은 캐시를 비활성화하면 심각한 영향을 미칠 수 있기 때문에 최대 지연을 늘릴 수 있습니다.
innodb_spin_wait_delay
의 기본값은 6
입니다. 스핀 대기 지연은 MySQL 옵션 파일 ( my.cnf
또는 my.ini
)로 지정하거나 명령 SET GLOBAL innodb_spin_wait_delay=
를 사용하여 런타임에 변경할 수있는 동적 전역 매개 변수입니다. 여기에서 delay
는 바람직한 최대 지연입니다. 이 설정을 변경하려면 delay
SUPER
권한이 필요합니다.
InnoDB 잠금 작업에 대한 성능 고려 사항은 섹션 8.10 "잠금 작업의 최적화" 를 참조하십시오.