14.6.6 Configuring Thread Concurrency for InnoDB 配置線程併發

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. 
相關文章
相關標籤/搜索