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) thread_handling = pool-of-threads
其他默认设置
case2-thp(default)-oversub(10) thread_handling = pool-of-threads
thread_pool_oversubscribe = 10
其他默认设置
case3-thp(default)-oversub(10)-max(10000) thread_handling = pool-of-threads
thread_pool_oversubscribe = 10
thread_pool_max_threads = 100000
其他默认设置
case4-thp(default)-oversub(16) thread_handling = pool-of-threads
thread_pool_oversubscribe = 16
其他默认设置
case5-thp(128)-oversub(16)-max(100000) thread_handling = pool-of-threads
thread_pool_size = 128
thread_pool_oversubscribe = 16
thread_pool_max_threads = 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_handling = pool-of-threads
thread_pool_oversubscribe = 10 #这个值建议在3~20间,不清楚的话,无需设置
备注:启用thread pool后,想要终止某个查询的话,要这么写kill query connection_id,,而不是写成 killconnection_id,否则就会导致整个连接被kill。
如果还有什么问题,欢迎加入我的qq群(272675472)讨论。
