一.基础架构
1.连接层
连接层负责接受连接、协议解析、授权验证。
2.服务层
mysql核心层,负责sql语句的解析、优化、查询缓存。所有的跨引擎功能在这里实现:存储过程、触发器、视图。
3.存储引擎层
数据的存储和读取。上层通过API与其交互,屏蔽了引擎差异。
二.线程模型
1.no thread模式
所有连接在主线程处理,并发低。
2.one connection per thread
主线程接受连接,验证通过后,为连接分配一个工作线程。工作线程负责连接的sql语句分析、优化、执行。大量连接会导致内存占用高,不断的线程切换,连接的创建销毁会导致线程的创建销毁。
3.thread pool
线程池分为多个group,主线程接受连接,验证通过后,将连接放入到group中。
group的lisenter线程负责group管理的连接网络事件的监听(epoll_wait),当连接有请求到来时,读取请求放入到队列中,group工作线程会从队列中取出一个请求执行。
thread pool有点是n个连接复用m个工作线程,。可以很好的控制线程数量。解决高并发时one connection per thread模式创建大量thread问题。
请求排队执行导致连接的锁释放慢,所以对于已经加锁的连接后续请求放入优先队列中。可以更快的释放锁资源,减少并发竞争。
三.连接池 + 线程池
连接池复用连接降低了连接的创建和销毁。请求进行排队处理,缓存了应用对mysql server的冲击压力。连接池控制了mysql server线程数量,复用工作线程。
四.执行流程
参考:
高性能mysql
https://www.cnblogs.com/cchust/p/4510039.html
https://blog.csdn.net/zhou307/article/details/104117585