当面试官问你MySQL的架构图......

mysql架构图
在这里插入图片描述
在这里插入图片描述
当MySQL启动以后,初始化模块会从系统配置中读取系统参数和命令参数,初始化整个MySQL系统,同时Storage Engines(存储引擎)也会启动。

初始化结束之后,连接管理模块会监听客户端的连接请求,相当于我们的B/S架构,当我们启动服务端的程序的时候,web服务器会开始监听浏览器客户端的连接请求。当有连接请求进来的时候,会将请求转发给线程管理模块去请求一个连接线程。

线程模块就相当于一个线程池一样,接到请求后会转发到用户模块,用户模块则是对请求进行一个grant操作,通过grant后会检查是否有空闲线程,如果有就取出与客户端连接,如果没有会重新建议一个线程再连接。

MySQL请求经过命令分发和解析进行执行,在MySQL Server有属于它自己的一个cache,如果执行的请求在缓存中有数据,则会从缓存中获取到返回给连接线程模块,连接线程将数据传递给客户端,请求结束。

我们可以查看当前mysql的缓存
在这里插入图片描述
如果不走cache,会转发给命令解析器根据解析结果走不同类型的模块,最后和存储引擎进行交互。

当一条命令执行完毕后,控制权都会还给连接线程模块,在上面各个模块处理过程中都依赖于核心API模块,比如:内存管理、小文件I/O,数字及字符串处理等。

MySQL的缓存机制

MySQL的缓存机制主要包括关键字缓存以及查询缓存。

概述

MySQL通过在内存中建立缓冲区buffer以及缓冲cache来提高mysql的查询性能。对于InnoDB存储引擎,MySQL采用buffer pool的方式缓存数据和索引,而对于MyISAM存储引擎,MySQL使用cache的方式缓存数据和索引。

而对于查询缓存机制,其实就是mysql缓存了sql执行语句以及查询结果,当运行了相同的sql,mysql服务器会从缓存中获取结果,而不会去转发到解析器解析并执行sql。

扫描二维码关注公众号,回复: 9840794 查看本文章

当然,如果表更改了。那么使用这个表的所有缓存查询都被清空。不管更改的是表中的任何数据或者是表结构的变化。所以对于频繁更改的表。查询缓存是不合适的,而对应一些不经常改变的数据并且有大量相同sql查询的表,可以相对扩大缓存区的大小,提高性能。

工作原理
当MySQL接收到传入的sql语句时,会跟先前已经在解析器解析过的sql语句进行比较,如果相同,则返回已缓存的数据。sql语句一定是完全相同,只要是要给字母的大小不同,也会受到影响。

发布了0 篇原创文章 · 获赞 0 · 访问量 167

猜你喜欢

转载自blog.csdn.net/qq_41490913/article/details/104880865