引言
本篇文章介绍MySQL的逻辑架构图。
MySQL并不完美,但足够灵活,能够适应高要求环境。MySQL不仅可以嵌入到应用程序中,同时也可以支持数据仓库、内容搜索、和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。
一、MySQL逻辑架构
MySQL最重要、最与众不同的特性就是它的存储引擎架构,这种架构将:查询处理、其他系统任务、数据的存储与提取 三部分分离。所以,带来的好处就是可以在使用时根据性能、特性,以及其他需求来选择数据存储方式。
存储引擎架构分为三层,自上而下,分为第一层:连接层;第二层:服务层;第三层:引擎层。
连接层:
MySQL的最上层是连接服务,引入了线程池的概念,允许多台客户端连接。主要工作是:连接处理、授权认证、安全防护等。
连接层为通过安全认证的接入用户提供线程,同样,在该层上可以实现基于SSL 的安全连接。
服务层:
服务层用于处理核心服务,如标准的SQL接口、查询解析、SQL优化和统计、全局的和引擎依赖的缓存与缓冲器等等。所有的与存储引擎无关的工作,如过程、函数等,都会在这一层来处理。在该层上,服务器会解析查询并创建相应的内部解析树,并对其完成优化,如确定查询表的顺序,是否利用索引等,最后生成相关的执行操作。如果是SELECT 语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
引擎层:
存储引擎层,存储引擎负责实际的MySQL数据的存储与提取,服务器通过API 与 存储引擎进行通信。不同的存储引擎功能和特性有所不同,这样可以根据实际需要有针对性的使用不同的存储引擎。
二、MySQL 工作流程
在这里,我从数据库架构的三个层面分别介绍数据库的工作流程:
最上层:客户端连接
1、连接处理:客户端同数据库服务层建立TCP连接,连接管理模块会建立连接,并请求一个连接线程。如果连接池中有空闲的连接线程,则分配给这个连接,如果没有,在没有超过最大连接数的情况下,创建新的连接线程负责这个客户端。
2、授权认证:在真正的操作之前,还需要调用用户模块进行授权检查,来验证用户是否有权限。通过后,方才提供服务,连接线程开始接收并处理来自客户端的SQL语句。
第二层:核心服务
1、连接线程接收到SQL语句之后,将语句交给SQL语句解析模块进行语法分析和语义分析。
2、如果是一个查询语句,则可以先看查询缓存中是否有结果,如果有结果可以直接返回给客户端。
3、如果查询缓存中没有结果,就需要真的查询数据库引擎层了,于是发给SQL优化器,进行查询的优化。如果是表变更,则分别交给insert、update、delete、create、alter处理模块进行处理。
第三层:数据库引擎层
1、打开表,如果需要的话获取相应的锁。
2、先查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。
3、当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的LRU表来管理缓存页,保证缓存的都是经常访问的数据。
最后,获取数据后返回给客户端,关闭连接,释放连接线程。