Mysql逻辑架构

1、整体逻辑架构

MySQL是典型的CS架构,即client/Server架构,服务器端程序使用的 mysqld。

客户端进程向服务进程发送一段文本(SQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。

2、第一层:连接层

系统(客户端)访问 MySQL 服务器前,首先就是建立 TCP连接。经过三次握手建立连接成功后, MySQL 服务器对 TCP 连接。 TCP 传输过来的账号密码做身份认证、权限获取。

TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。还会有个线程池,去运行后面的流程。每一个连接从线程池中获取线程进行数据库操作,省去了创建和销毁线程的开销。

3、第二层:服务层

对SQL语句进行查询处理,与数据库文件的存储方式无关

在服务层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化:如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。

3.1、 SQL Interface: SQL接口

  • 接收用户的SQL命令,并且返回用户需要查询的结果。
  • MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口。

3.2、 Parser: 解析器

在解析器中对 SQL 语句进行语法分析、语义分析。

在SQL命令传递到解析器的时候会被解析器验证和解析,并为其创建语法树,并根据数据字典验证该客户端是否具有执行该查询的权限。创建好语法树后,MySQL还 会对SQl查询进行语法上的优化,进行查询重写。

3.3、Optimizer: 查询优化器

  • SQL语句在语法解析之后、查询之前会使用查询优化器确定 SQL 语句的执行路径,生成一个执行计划。
  • 这个执行计划表明应该使用哪些索引进行查询(全表检索还是使用索引检索),表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。

3.4、 Caches & Buffers: 查询缓存组件

  • 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。
  • 这个查询缓存可以在 不同客户端之间共享。

4、第三层:引擎层

插件式存储引擎层( Storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别 维护的底层数据执行操作,服务器通过API与存储引擎进行通信。

4.1、存储层

所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在文件系统上,以文件的方式存在的,并完成与存储引擎的交互。

  1. 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端。
  2. SQL 层(服务层):对 SQL 语句进行查询处理;与数据库文件的存储方式无关。
  3. 存储引擎层:与数据库文件打交道,负责数据的存储和读取。