文章目录
前言
MySQL 软件提供了一个非常快速、多线程、多用户和健壮的 SQL(结构化查询语言)数据库服务器。MySQL Server 旨在用于任务关键型、重负载生产系统以及嵌入到大规模部署的软件中。
MySQL逻辑架构图
层级介绍
第一层:连接层
主要完成一些类似于连接处理、授权认证及相关的安全方案,在该层上引用了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。每个客户端连接都会在服务端拥有一个线程,每个连接发起的查询都会在对应的单独线程中执行。
第二层:业务逻辑处理层
业务逻辑处理层是MySQL的核心服务功能层,包括查询解析、分析、查询缓存、内置函数、存储过程、触发器、视图等,select操作会先检查是否命中查询缓存,命中则直接返回缓存数据,否则解析查询并创建对应的解析树。如sql接口,缓存查询,sql的分析和优化以及部分内置函数的执行。当提交的SQL语句经过该层时,MySQL会通过分析器判断处理并自行优化,如果不符合要求,就会返回SQL语句错误。
① 管理服务和工具组件
从备份和恢复的安全性、复制、集群、管理、配置、迁移和元数据等方面管理数据库。② SQL接口组件
进行DML、DDL,存储过程、视图、触发器等操作和管理;用户SQL命令接口。③ 解析器组件
验证和解析SQL命令。④ 查询优化器组件
对SQL语句查询进行优化, “选取、投影和连接”。⑤ 缓存和缓冲区
由一系列小缓存组成的,比如表缓存,记录缓存,key缓存,权限缓存等。
第三层:存储引擎层
存储引擎层主要负责MySQL中数据的存储和提取,MySQL服务器通过API与存储引擎通信,屏蔽了各种引擎之间的差异,MySQL采用插件式的存储引擎的架构,开发时可以根据项目需求来设置存储引擎。常用的存储引擎有:InnoDB、MyISAM。
存储引擎 InnoDB 和 MyISAM 的对比:
对比项 InnoDB MyISAM 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条数据也会锁住整个表,不适合高并发的操作 行锁,操做时只锁住某一行,不对其他行有影响适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不近缓存索引,还缓存真实数据,对内存的要求较高,而且内存大小对性能有决定性的影响 表空间 小 大 关注点 性能 事务 默认安装 YES YES
第四层:数据存储层
主要是将数据存储在运行于裸设备的文件系统之上,并完成于存储引擎的交互。
工作流程
- 首先客户端与MySQL连接,这部分流程由连接器处理,它包括管理客户端与MySQL的连接之外还包括权限认证。当客户端与MySQL建立连接,MySQL会查询权限表该用户相关权限,存放在该连接绑定的session中,当权限修改时,不会影响已经建立的连接,直到重新建立连接才会生效。
- 建立连接之后,客户端提交一个select语句,会首先在缓存中查找,如果能找到则直接返回结果,否则交由分析器处理。缓存是以表为单位的,当对某个表进行更新相关操作时,该表的缓存会全部失效。据了解,缓存的使用往往弊大于利,建议不适用。MySQL 8.0之后的版本已经将查询缓存的整块功能删掉了。
- 流程到分析器,分析器对SQL进行词法分析和语法分析,然后根据分析结果再先查找缓存,如若还找不到结果,则走接下来的流程。
- 流程到了优化器,由于我们往往会在一个表建多个索引,优化器根据执行,自行决定是否使用索引、使用哪个索引进行查询,然后交由执行器处理。
- 最后,执行器根据优化器给出的执行计划,结合连接的权限进行结果查询。
总结
- MySQL是插件式的存储引擎的架构,可以进行拔插替换。
- 插件式的存储引擎的架构将查询处理和其他的系统任务以及数据的存储提取相分离。
参考文献:https://blog.youkuaiyun.com/weixin_44580146
https://blog.youkuaiyun.com/qq_35688140