mysql thread pool应用,thread pool 介绍二

作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

最近发现线上的数据库连接又有所增长,数据库的性能有点下降,所以又进一步的关注了一下thread pool.  大概总结如下:

Thread Pool根据系统的CPU创建出thread_pool_size(该参数不建议调整),也可以把这个参数理解为Thread Pool共分了多少Group, 每个Group里同时可以运行多少个任务由:thread_pool_oversubscribe控制,默认是3. 如果把thread_pool_oversubscribe设置为1,则thread_pool_size是同时允许的活跃任务数.每个Group都是一个epoll的对象.

Thread_pool_size  X  Thread_pool_oversubscribe = MySQL内部同时支持运行的最大任务数. 如MySQL-5.5在128个任务时运行比较好时,CPU是16个核,可以把Thread_pool_oversubscribe更改为: 8或是10都可以.

(实际生产中可以通过调Thread_pool_oversubscribe来防止memcache/Redis倒后的数据库雪崩问题)

Thread_pool现在在Percona中引入了优先级队列,新的连接会根据 thread_pool_high_prio_tickets排出优先级,可可以分为两个队列(这个有点类似于Innodb的tickets)目的是把连接接分一下优先级.

thread_pool_max_threads 用于控制thread pool最大允许有多少连接默认是100000.为了防止socket创建占用太多内存,可以把这个降低一点.

thread_pool_stall_limit 用于防止thread pool里的线程死掉.Thread pool里线程如果超过thread_pool_stall_limit声明的时间没响应降会重新创建.默认是500ms

特殊场景:

Thread pool里被占用满了.管理者操作太慢怎么办?

Thread pool提供一个特殊的参数: extra_port 去监听一个和服务端口不一样的端口,用于Thread pool被占满或是被锁着的情况下用于管理使用.

extra_max_connections 用于声明extra_port最大允许的连接.

这个功能也能用于防止MySQL连接数占满不能进入MySQL进行管理的问题.

我大概测了 1000, 2000这样规模的连接,如果不使用thread pool 都跑不起来. 使用thread pool后,性能测试表现都非常不错.

测试版本: Percona-Server-5.5.35  1G innodb buffer pool , Tpcc-mysql (20 warehouse)  1.9G数据大小.

普通PC机测试(4个core)

Threadpool配置:

thread_handling=pool-of-threads

thread_pool_oversubscribe=25

三次并发200, 1000,2000测试平均tpmC分别为: 3500tpmC, 3414tpmC, 3318tpmC

连接数多后也是有一定的性能下降,但这个下降还能接受. 对于应用连接比较多的场景thread-pool看来还是一个不错的功能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值