浅谈mysql体系结构,这下总该懂了吧!
今天我们来聊一个简单的话题,mysql体系结构,实际上mysql是什么,大家都应该已经很了解,但对于mysql的底层结构,网上有一大堆的教程,说的似是而非,要么并不完全,总有种隔靴搔痒的感觉,今天,叶子就带大家好好梳理一下。
废话不多说,直接上图。
一、连接层(Client Connectors)
连接层又称为客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。
目前几乎支持所有主流的服务端编程技术,主要完成一些类似于连接处理、授权认证、及相关的安全方案。
在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全连接,并且在这里服务器也会为接入的客户验证他所具备的权限。
注意:连接用户权限修改后,不会立即生效,就是因为在这里将用户认证后的权限信息保存了下来,需要用户断开并重新连接,重新进行校验,修改后的权限才会生效。
二、服务层(MySQL Server)
服务层是MySQL Server的核心,主要包含系统管理和控制工具、SQL接口、解析器、查询优化器。
实际上,连接层中的连接认证,校验流程,也可以归属在服务层中。
数据库连接成功后,在服务层完成大多数核心功能,如Sql接口,查询缓存,Sql分析和优化,以及一些内置函数的执行。
它的主要流程是这样的:
第一步,查看当前查询是否存在缓存,有则直接返回,没有则进行服务器解析,并生成对应的内部解析树。
第二步,完成相应的优化,确定表的查询顺序,是否使用索引
第三步,生成对应的操作。
三、存储引擎层(Pluggable Storage Engines)
存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,不同的存储引擎具备不同的功能,可以根据自己的需要进行选择,最常见的是MyISAM和InnoDB。
注意:数据库的索引就是在引擎层实现的。
四、系统文件层(File System)
文件层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件(redolog,undo.log),数据文件,索引文件,二进制日志,错误日志,配置文件,pid 文件,socket 文件等。
MySQL运行机制
建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工通信 ”。
查询缓存(Cache&Buffer),如上图所示,存在则直接返回,不存在则进行查询,不过需要注意的是,它默认是关闭的,并且,在8.0以后版本,不再支持查询缓存,因为它需要SQL完全相同才能匹配缓存,命中率极低,如果表进行DDL或者DML操作,缓存就会被清空。
解析器(Parser),将客户端发送的SQL进行语法解析,生成"解析树"。预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。
优化器(Optimizer),根据“解析树”生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,分为两类:静态优化(编译时优化)、动态优化(运行时优化)。
查询执行引擎负责执行 SQL 语句,得到查询结果并返回给客户端。若开启用查询缓存,这时会将SQL 语句和结果完整地保存到查询缓存(Cache&Buffer)中,以后如果有相同的 SQL 语句执行则直接返回结果。
五、总结
ok,这篇就到这里了,了解了连接层,服务层,存储引擎层,文件层的定义,相当于我们初步了解了mysql结构,对mysql也有了一个整体的认知,不再是雾里看花,最后,希望大家都能从这篇文章中有所收获,好了,我们下篇再见!