2016-03-31
참고링크 : http://www.mysqlkorea.com/gnuboard4/bbs/board.php?bo_table=community_03&wr_id=3731


삭제 대비용 원본글 복사


innodb_thread_concurrency
해당 서버가 많은 수의 CPU와 디스크를 가지고 있다면, 서버의 리소스를 많이 활용할 수 있게 이 값을 높게 설정한다면 성능 향상에 도움이 됩니다.
참고로 innodb_thread_concurrency 값은 0 으로 설정하여 사용하는것이 무난합니다.
0은 시스템이 가용할수 있는 만큼 최대로 사용한다는 뜻입니다.



참고링크 : http://minsql.com/mysql/innodb-thread-concurrency-설정하기/


삭제 대비용 원본글 복사


[Notes]
– InnoDB가 제한된 개수 이상의 쓰레드 요청을 받은 경우, 새로운 request는 잠시동안 sleep했다가 재시도 하게 된다. 재시도시에도 실행되지 못한 request는 FIFO queue에 들어가고, 추후에 실행된다.
– lock을 대기하는 thread는 동시 수행 쓰레드 개수에 카운트 되지 않는다.

  1. innodb_thread_concurency
    • 동시 쓰레드 개수 제한
    • 이 제한에 도달하면, 새로운 thread는 innodb_thread_sleep_delay동안 sleep한다.
    • default : 버전별로 다름. MySQL 5.6에서는 0(제한없음)
    • innodb_thread_concurrency가 0인경우, innodb_thread_sleep_delay는 무시된다.
    • innodb_thread_concurrency가 0이상인 경우에도 context switching overhead를 줄이기 위해서 하나의 SQL문에서 여러개의 request를 요청하는 경우, innodb_thread_concurrency의 설정을 준수하지 않고 허용한다. 예를들면 join문 같은 경우 multiple row operations을 수행하게 될텐데 이때 할당받은 “tickets”을 사용하여 overhead없이 반복적으로 쓰레드를 실행할수 있다. 새로운 SQL문이 시작되었을때는 무조건 innodb_thread_concurrency 설정을 확인하고 준수한다. 이 쓰레드가 실행될 권한을 얻게 되면, 부수적인 row operations를 위한 innodb_concurrency_tickets에 설정된 개수만큼의 티켓을 얻게 된다. 티켓이 다 소진되면, 이 쓰레드는 다시 innodb_thread_concurrency 를 다시 재확인하고 재실행되거나, 큐잉된다.
  2. innodb_thread_sleep_delay
    • InnoDB queue에 들어가기전에 얼마나 sleep할것인가.
    • default : 10000(microseconds)
    • 이전버전에서는 workload에 따라 적정한 value가 무엇인지 시험해봐야했다.
    • MySQL 5.6.3부터는 innodb_adaptive_max_sleep_delay를 사용해서 최대값을 지정할 수 있고,innodb_thread_sleep_delay는 InnoDB가 자동으로 조정한다.
  3. innodb_adaptive_max_sleep_delay
    • 이 값을 0 이상의 값으로 지정하면, InnoDB가 innodb_thread_sleep_delay를 자동으로 조정한다.
    • default : 150000(microseconds)
    • MySQL 5.6.3버전부터 소개됨.
  4. innodb_concurrency_tickets
    • 한번 스케줄링된 쓰레드는 설정된 티켓개수만큼 자유롭게 InnoDB를 사용할수 있다.
    • default : 5000(>= 5.6.6), 500(<= 5.6.5)