mysql基础架构,旧

旧,

马哥视频----mysql事务和隔离级别 

MySQL基础架构图如下 

 

 连接管理器(面对用户的一端,接收用户连接并建立连接)
     1. 接受请求: 监听某个套接字上接收客户端请求,接收下来后创建一个线程与响应 
     2. 创建线程:线程还有线程管理器专门负责相关功能,为了加速线程创建(因为在用户连接非常多且非常频繁的话线程频繁创建并销毁是相当销毁资 源)于是有了线程重用的概念,一个用户连接进来退出了,线程没有被销毁而是直接放到空闲线程池当中,而
                         新的用户请求到来后,直接给它拿一个空闲线程响应 。

                           ( 每个用户都有一个线程,每个用户自己的所有操作都在它自身线程地址空间内完成,而cpu是有限的也就意味着每个用户发起的操作只能轮流在cpu上执行,而某个一个查询的速度非常非常慢,执行速度又非常慢,结果导致一个用户的查询虽然很单,
                           但是执行起来却任然很慢,因为此行人的没结束, 所以像这些每一个查询操作每一个用户的线程最终都要轮流在cpu上执行的,而这些轮流执行的过程很有可能受到其他用户线程的影响)

     3.验证用户是否可以连入mysql服务器:
     4.建立安全连接:

mysql协会是明文的(如果需要机密性的,连接管理器可能还会创建安全连接)


查询缓存(如果缓存有结果,那么从高速缓存中直接返回用户的查询结果,查询缓存只跟读操作有关)
分析器(如果缓存没命中,于是交由分析器做分析,分析的结果如果发现缓存中任然有结果还可以交由缓存,直接从缓存中返回结果,否则交给优化器完成优化器
优化器 (完成优化)
执行引擎
储存引擎(完成语句执行)

 

 

当我们发起查询操作后,mysql服务器会负责解析每一个查询,并且会在mysql进程内部创建一个解析数,在这个解析数执行各种优化,并计算出最优执行路径,
如果查询结果是确定性的(像 select current_time() 查询当前时间的结果 是非确定性的),将缓存下来

 

如果没有缓存直接交给解析数处理
如果有缓存没一次查询之前都需要查询缓存是不是命中了,如果没有交给解析数