MySQL從5.5.16開始,在MySQL的商業化版本中将Thread Pool作為plugin提供官方功能支援。後來MariaDB也實作了這一功能,Percona也跟進實作了。從這幾天對Percona 5.6.16版本做了下thread pool對比測試,試圖找到較為合适的配置參數。
下面是幾個測試模式對比:
模式 | 配置參數 |
Percona 5.6.16-nothp | 未開啟 thread pool 模式 |
CASE0-thp(128)-oversub(16)-max(2048) | thread_handling = pool-of-threads thread_pool_size = 128 thread_pool_oversubscribe = 16 thread_pool_max_threads = 2048 |
CASE1-thp(default) | 其他預設設定 |
CASE2-thp(default)-oversub(10) | thread_pool_oversubscribe = 10 |
CASE3-thp(default)-oversub(10)-max(10000) | thread_pool_max_threads = 100000 |
CASE4-thp(default)-oversub(16) | |
CASE5-thp(128)-oversub(16)-max(100000) |
仍然采用tpcc-mysql這個測試工具,基準值:
測試Warehouse數: 100 |
warmup time: 60s |
run time: 1200s |
并發線程數: 64 ~ 1920 |
測試環境資訊:
測試機 | DELL PE R710 |
CPU | E5620 @ 2.40GHz(4 core, 8 threads, L3 Cache 12 MB) * 2 |
記憶體 | 32G(4G * 8) |
RAID卡 | PERC H700 Integrated, 512MB, BBU, 12.10.1-0001 |
系統 | Red Hat Enterprise Linux Server release 6.4 (Santiago) |
核心 | 2.6.32-358.el6.x86_64 #1 SMP |
raid級别 | raid 0 |
檔案系統 | xfs |
硬碟 | SSD: Intel 520系列SSD, 800G * 1 |
Percona版本号:5.6.16-64.2-rel64.2-log Percona Server with XtraDB (GPL), Release rel64.2, Revision 569,Percona相關的關鍵配置有:
innodb_buffer_pool_size = 26G |
innodb_flush_log_at_trx_commit = 1 |
測試腳本可參考我之前的一個分享:MySQL壓力測試經驗
測試結果見下:
針對這個測試結果,我們可以得到一些結論:
1、通常地,隻需要開啟 pool-of-threads 模式就可以; |
2、可以根據實際壓力情況,适當調整 thread_pool_oversubscribe 選項以提升 TPS,這個選項值設定範圍一般在 3~20; |
3、thread-pool-size預設值是邏輯CPU個數,最大值是 128,不建議調整或顯式設定,如果顯式設定 thread-pool-size 的值,可能會帶來反效果; |
4、thread_pool_max_threads 預設值是 100000,強烈不建議修改。 |
綜上,對于Thread Pool,我們一般建議設定下面2個選項就足夠了:
thread_pool_oversubscribe = 10 #這個值建議在3~20間,不清楚的話,無需設定 |