mysql 线程池. 参数_mysql线程池

mysql连接池与线程池

区别

连接池是客户端进行设置

线程池是db服务端设置

连接池的作用

控制客户端频繁连接DB服务器,和销毁连接线程

线程池的优势

1.防止雪崩

2.提高性能,提升系统稳定性

架构

mysql_thread_pool被划分成一个线程(timer)和多个group,每个group又有对应的工作线程

timer线程

控制管理整个group,。。。

group组成

两个高低队列

listener

worker

线程池简化工作流程

1.客户端的请求根据threadid%thread_pool_size来决定落到哪个group

2.group中的listener监听到有新请求,加入队列或者将其转换成worker线程

3.group中的thread线程检查队列的请求,

有,处理,没有,则休眠,一直没唤醒的话,超过thread_pool_idle_timeout后,则结束线程退出

当然Group中running线程数超过thread_pool_oversubscribe+1的话,也会休眠

4.timer线程会一直检查group是否被阻塞,如果有,就唤醒worker线程或者重建

线程池的分配机制

线程池会根据thread_pool_size的值来进行group的分配,每个group各自管理客户端发起的连接,根据threadid%thread_pool_size决定分配到哪个组?

thread_pool_oversubscribe控制每个group的并发线程数

相关参数 -- show variables like '%thread%'

thread_handling = pool-of-threads 启用线程池

thread_pool_size = cpu cores 设置线程池group的数量

thread_pool_oversubscribe = 8 每个group的最大线程数 thread_pool_oversubscribe+1

thread_pool_high_prio_mode 高优先级队列控制参数,默认transactions

thread_pool_high_prio_tickets 每个连接分配来进入高优先级队列的ticket数,尽量设置大点。

thread_pool_idle_timeout worker线程最大空闲时间,默认60秒,超过限制后会退出

thread_pool_max_threads 限制线程池最大线程数,超过限制后将无法再创建更多线程,默认值10000.

thread_pool_stall_limit 设置timer线程的检测group是否异常的时间间隔,默认500ms

配置文件配置 #其他参数默认即可

#thread_pool

thread_handling = pool-of-threads

thread_pool_size = 36

thread_pool_oversubscribe = 8

performance_schema =off

# extra_connection

extra_max_connections = 8

extra_port = 33333

注意事项

performance_schema=off如果performance_schema与thread_pool同时开启的话,会有内存泄漏的问题,5。7.21-20已修复改问题

extra_connection防止连接池满无法登陆

拨测异常问题

启用线程池后,相当于限制了线程并发数,当并发连接达到mysql的最大线程数的时候,其他线程需要等待,新连接也会卡在连接验证的那一步

这时候会造成拨测程序连接MySQL超时,拨测程序连接超时后,就会认为master出现了问题,在极端情况下,重试多次都有异常后,就会

启动自动切换操作,将业务切到从机

解决办法

1.启用旁路端口,监控和高可用相关直接使用MySQL的旁路端口管理

2.修改高可用探测脚本,将达到线程池最大活动线程数返回的错误做异常处理,当做超过最大连接数的场景来处理(只做告警,不进行自动切换)

慢sql的引入问题

因为慢sql的问题,导致group线程数不够

在没有阻塞的时候,每次都是4个线程,而后面有一个线程长时间运行的时候,就会出现那个长时间线程对应的group出现排队的情况,

最后虽然有三个空闲的线程,但却只有一个线程在处理

解决办法

1.调大thread_pool_oversubscribe

2.找到慢sql,优化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值