前言
學習MySQL數據庫技術,一個很是重要的技能就是性能調優。一般狀況下,都是自下而上的調優方法,主要包括運行環境、配置參數、SQL性能和系統架構設計調優等。mysql
本文從多線程併發的角度進行的思考,簡單描述MySQL併發參數及其調優。sql
MySQL併發模型
架構

Innodb用本身的線程調度機制來控制線程如何進入innodb內核工做,並執行相關的操做。數據庫
Innodb的這種兩階段的機制減小了操做系統由於線程之間的上下文切換帶來的開銷。架構
Innodb concurrency相關參數
-
innodb_thread_concurrency併發
- 同一時刻可以進入innodb層併發執行的線程數量。若是超過CPU核數,某些線程就會處於就緒狀態;若Server層線程數超過這個數值,多餘的線程會被放到wait queue隊列中等待;
- 默認值:0,表示不限制線程併發執行的數量,全部請求都會被認爲是可調度的。此時,innodb_thread_sleep_delay的值會被忽略
- 範圍:0 ~ 1000
-
innodb_commit_concurrency性能
- 同一時刻容許同時commit的線程數量
- 默認值:0,即不限制
- 範圍:0 ~ 1000
- 若是 innodb_thread_concurrency 設置的有點大innodb_commit_concurrency應該作出相應的調整,不然會形成大量線程阻塞。
-
innodb_concurrency_tickets學習
- thread進入INNODB中,會得到innodb_concurrency_tickets次通行,該線程在接下來的innodb_concurrency_tickets次進入到INNODB中不須要再進行檢查,可直接進入。
- 默認值:5000
- 範圍:0 ~ 4294967295
-
innodb_thread_sleep_delayspa
- 線程未能進入INNODB存儲引擎,須要等待innodb_thread_sleep_delay毫秒再次嘗試進入;即進入wait queue前sleep的時間;
- 單位:微妙
- 默認值:10000