没有合适的资源?快使用搜索试试~ 我知道了~
介绍MySQL线程池的作原理。1、架构图先来看看threadpool的架构图2、Thread Pool的组成从架构图中可以看到Thread Pool由个Time
资源详情
资源评论
资源推荐
MySQL线程池问题个⼈整理
张秀云 | 腾讯数据库研发与运营⾼级⼯程师
最近出现多次由于上层组件异常导致DB雪崩的情况,将部分监控DB启⽤了
线程池功能。在使⽤线程池的过程中不断的深⼊学习,期间也遇到了不少问
题。本⽂就来详细讲述⼀下MySQL线程池相关的知识,以帮助⼴⼤DBA快
速了解MySQL的线程池机制,快速配置MySQL的线程池以及了解⾥⾯存在
的⼀些坑。其实,我想说的是,了解和使⽤MySQL线程池,看这篇⽂章就
够了。
⼀、为什么要使⽤MySQL线程池
在介绍为什么要使⽤线程池之前,我们都知道,随着DB访问量越来越⼤,
DB的响应时间也会随之越来越⼤,如下图:
⽽DB的访问⼤到⼀定程度的时候,DB的吞吐量也会出现下降,并且会越来
越差,如下图所⽰:
那么是否有什么⽅式,能让对着DB的访问量越来越⼤,DB始终能表现出最
佳的性能?类似下图的表现:
答案就是今天要重点介绍的线程池功能,总结⼀下,使⽤线程池的理由有如
下两个:
1、减少线程重复创建与销毁部分的开销,提⾼性能
线程池技术通过预先创建⼀定数量的线程,在监听到有新的请求的时候,线
程池直接从现有的线程中分配⼀个线程来提供服务,服务结束后这个线程不
会直接销毁,⽽是又去处理其他的请求。这样就避免了线程和内存对象频繁
创建和销毁,减少了上下⽂切换,提⾼了资源利⽤率,从⽽在⼀定程度上提
⾼了系统的性能和稳定性。
2、对系统起到保护作⽤
线程池技术限制了并发线程数,相当于限制了MySQL的runing线程数,⽆论
系统⽬前有多少连接或者请求,超过最⼤设置的线程数的都需要排队,让系
统保持⾼性能⽔平。从⽽防⽌DB出现雪崩,对底层DB起到保护作⽤。
可能有⼈会问,使⽤连接池是否也能达到类似的效果?
可能有的DBA会把线程池和连接池混淆,其实两者是有很⼤区别的,连接池
⼀般在客户端设置,⽽线程池是在DB服务器上配置;另外连接池可以取到
避免了连接频繁创建和销毁,但是⽆法取到控制MySQL活动线程数的⽬标,
在⾼并发场景下,⽆法取到保护DB的作⽤。⽐较好的⽅式是将连接池和线
程池结合起来使⽤。
⼆、MySQL线程池介绍
(⼀)、MySQL线程池简介
为了解决one-thread-per-connection(每个连接⼀个线程)存在的频繁创建和销
毁⼤量线程以及⾼并发情况下DB雪崩的问题,实现DB在⾼并发环境依然能
保持较⾼的性能。Oracle和MariaDB都推出了ThreadPool⽅案,⽬前Oracle
的threadpool实现为plugin⽅式,并且只添加到在Enterprise版本中,Percona
移植了MariaDB的threadpool功能,并做了进⼀步的优化。本⽂的环境是基
于Percona MySQL 5.7版本。
(⼆)、MySQL线程池架构
MySQL的threadpool(线程池)被划分为多个group(组),每个组又有对应
的⼯作线程,整体的⼯作逻辑还是⽐较复杂,下⾯我试图通过简单的⽅式来
介绍MySQL线程池的⼯作原理。
1、架构图
⾸先来看看threadpool的架构图
剩余13页未读,继续阅读
会飞的黄油
- 粉丝: 22
- 资源: 303
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0