mysql 的thread pool

myownstars發表於2013-07-15

什麼是thread pool

Mysql為一個客戶端連線分配一個執行緒,然而頻繁的連線請求會消耗大量的CPU資源,而執行緒池透過快取並重用執行緒可有效解決這一問題;

Thread pool plugin提供此功能,但其為商業版5.5.16所提供;

 

功能

1 重用thread stack,保證其一直位於cpu cache而不被踢出,可以更加高效的利用CPU cache

2 mysql伺服器端限制併發執行的執行緒數,減輕context switch的消耗,同時為OS排程器降壓;

3 並行事務過多會導致mutex競爭,而thread pool可透過限制並行的執行緒數避免這一點

 

原理

客戶端連線 à thread pool à 伺服器執行緒

對兩者進行對映,且對應關係不固定 ,伺服器執行緒負責執行從客戶端傳來的sql

 

基本單位為執行緒組,每組包含一個監聽執行緒和執行執行緒(有可能多個),前者負責接受客戶端傳來的sql,後者負責執行;

當接受到新sql時,如果此時沒有其他sql則由監聽執行緒立即執行,此期間該組暫時無監聽,如果sql執行時間過長,則執行緒池為其分配一個新的監聽執行緒;否則排隊等待;

 

每組包含兩個執行對列,low-prioritylow-priority,優先執行high-priority佇列;

事務的第一個sql進入low-priority,而其後續sql則被放入high-priority

非事務引擎或啟動auto_commit時,所有sql都被當作low-priority,如果innodbMyisam混合使用,則優先執行innodb相關語句;

sqllow-priority等待超過thread_pool_prio_kickup_timer,則被移到high-priority

 

 

執行緒池包含若干執行緒組,每組包含一系列客戶端連線,採用round-robin分配機制;

理論上講,一個執行緒組一次只能由1個執行執行緒,但會根據實際情況自動調整:

每個組各有一個監聽thread,用於接收客戶端傳來的sql,;如果是立即執行則由監聽thread負責,此期間該組暫時無監聽thread,如果該sql執行時間過長,則執行緒池為其分配一個新的監聽thread;執行緒池有個後臺程式專門健康各組工作狀態;

執行緒池啟動時為每個組會建立一個監聽thread

每個組包含兩個佇列,high

 

引數

Thread_pool_size:執行緒組數量,決定同時可執行的語句數;預設16,候選值1-645.5.16後才引入此值;對於Innodb,候選值範圍16-36;而MyISAM可降低為4-8

Thread_pool_algorithm:管理執行緒池的演算法;0預設值,採用保守的低併發演算法;1採用相對激進演算法,增加併發性;5.5.16後才引入此值;

Thread_pool_high_priority_connection0預設值,等待執行的語句使用低優先順序和高優先順序兩個佇列;1只使用高優先順序佇列;5.5.16後才引入此值;

Thread_pool_max_unused_threads:最大非活動執行緒數;0(預設值)無限制,最大4096;非活動執行緒可含有1個消費者執行緒和其他保留執行緒,其中消費者執行緒優先被喚醒;5.5.16後才引入此值;

Thread_pool_stall_limit:以10ms為單位,預設60ms範圍值4-600,每個語句的時間片大小,一旦耗完則掛起將CPU交於其他執行緒;5.5.16後才引入此值;

Thread_pool_prio_kickup_timerlow-priority移到high-priority所需等待時間,單位毫秒,預設為10001秒;

 

理論上講,伺服器支援的最大執行緒數=max_connections + thread_pool_size,即所有連線都處於執行模式,且每個執行緒組又有1個監聽thread

 

thread_cache_size定義重用執行緒的最大個數,當客戶端推出時其對應的thread保留以待後續的連線使用,但其無法控制並非執行的執行緒數

http://dev.mysql.com/doc/refman/5.5/en/thread-pool-plugin.html

 

為客戶端連線池,省去了建立執行緒的資源消耗,但無法控制執行緒爭用CPU和資料庫mutex;而thread pool用來控制伺服器不會過載;

Thread_cache_size:執行緒快取大小,當有客戶端退出時將其執行緒放入快取以供新的連線使用;對於連線繁忙的資料庫可提升效能;

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-766302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章