14.6.6 Configuring Thread Concurrency for InnoDB 配置線程併發 InnoDB 使用操做系統線程來處理請求(用戶事務) 事務可能執行不少次在它們提交或者回滾前。 在如今的操做系統,具備多核CPU 上下文切換是有效的, 不少的負載運行很好沒有任何併發線程數量的限制 在這種狀況下 它是用助於最小化上下文切換在線程之間, InnoDB 使用一些技術來限制併發執行操做系統線程的數量(也就是說請求的數量任何一個時間的處理數量) 當InnoDB 從用戶會話接收一個新的請求,若是 併發線程的數量是在一個預約義的限制, 新的請求會sleep一段時間在他再次嘗試前。 你能夠設置併發線程的數量 經過設置r innodb_thread_concurrency參數 mysql> show variables like '%innodb_thread_concurrency%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_thread_concurrency | 0 | +---------------------------+-------+ 1 row in set (0.00 sec) 一旦併發線程的數量達到這個值, 額外的線程sleep 會等待數微妙 mysql> show variables like '%innodb_thread_sleep_delay%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_thread_sleep_delay | 10000 | +---------------------------+-------+ 1 row in set (0.00 sec) 此前,它須要實驗來找出最有的值對於innodb_thread_sleep_delay, 最有的值 能夠改變取決於負載。 在MySQL 5.6.3 and higher, 你能夠設置配置選項 innodb_adaptive_max_sleep_delay爲高的值 InnoDB 自動調整innodb_thread_sleep_delay up或者down 取決於當前線程的活動 默認值對於innodb_thread_concurrency 和說明默認限制在併發線程數量上已經被改變了再各個版本 innodb_thread_concurrency 默認值是0,這樣沒有沒有限制 InnoDB 致使線程sleep 只有當併發線程的數量被限制。 當沒有線程限制時,全部的競爭都會被調度。 也就是說,若是 innodb_thread_concurrency設置爲0, innodb_thread_sleep_delay 會被忽略 當有一個線程數限制時(當innodb_thread_concurrency is > 0), InnoDB 減小上下文切換經過運行多個請求在一個SQL語句執行到InnoDB 沒有觀察限制經過innodb_thread_concurrency.