这里分为三层:
1.链接层:链接与线程处理,这一层并非MySQL独有,通常的基于C/S架构的都有相似组件,好比链接处理、受权认证、安全等。
2.SQL处理层:也叫MySQL服务器层,包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现
3.数据存储层:也叫存储引擎层,负责数据存储,存储引擎的不一样,存储方式、数据格式、提取方式等都不相同,这一部分也是很大影响数据存储与提取的性能的。可是,与分层的思想一致,SQL处理层是经过API与存储引擎通讯的,API屏蔽了下层的差别,下层提供对外接口,上层负责调用便可,没必要清楚下层是怎么实现的。php
客户端说明:MySQL是基于C/S架构的,这里的客户端天然是专门的,能访问到MySQL服务器的,主要有这么几类,操做客户端:单纯的操做MySQL服务器中的数据(这里数据包括库、表、索引、表中数据等),好比经常使用的native、phpMyAdmin、Sequal Pro等;应用客户端:应用程序经过程序访问数据库,好比JDBC、ODBC、PHP程序、python程序等。无论是哪一种,其实最后都转换为SQL语句访问MySQL。html
当MySQL启动(MySQL服务器就是一个进程),等待客户端链接,每个客户端链接请求,服务器都会新建一个线程处理(若是是线程池的话,则是分配一个空的线程),每一个线程独立,拥有各自的内存处理空间,可是,若是这个请求只是查询,不要紧,可是如果修改数据,很显然,当两个线程修改同一块内存是会引起数据同步问题的。
>链接处理流程python
链接到服务器,服务器须要对其进行验证,也就是用户名、IP、密码验证,一旦链接成功,还要验证是否具备执行某个特定查询的权限(例如,是否容许客户端对某个数据库某个表的某个操做)。
>认证流程mysql
这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每一个引擎都需提供的功能(引擎需对外提供接口)),例如:存储过程、触发器、视图等。git
>执行过程:程序员
(图中的查询并非必定是select语句,在MySQL中,通常习惯把每一条SQL命令称为query(查询))算法
1.若是是查询语句(select语句),首先会查询缓存是否已有相应结果,有则返回结果,无则进行下一步(若是不是查询语句,一样调到下一步);
2.解析查询,建立一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析;详情可查看:MySQL解析器。
3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择须要的索引等。这一阶段用户是能够查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,好比某个操做的开销信息、是否对特定索引有查询优化等。详情可查看:MySQL优化器。sql
存储引擎,也称为表类型,主要用来存储数据的,不一样的存储引擎采用不一样的技术(存储机制、索引机制、锁定机制)存储数据,这主要是为了知足数据存储要求,好比有的数据不须要大量的改动,只用来查询,而有的数据则须要经常修改(数据插入、删除、更新),针对各类业务状况,为了更好的数据处理效率采用不一样的数据存储技术(即不一样存储引擎)。
MySQL的存储引擎是插件式的,也就是说,用户能够随时切换MySQL的存储引擎:针对表或针对库均可(经过SQL语句命令)。这种灵活性也是为何MySQL受到欢迎的一个重要缘由。MySQL集合了多种引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默认的是InnoDB(MySQL5.5开始,之前是MyISAM)。数据库
如下主要参考文章:MySQL架构(guisu)。
以上组件是对逻辑架构的实现:
1.Management Services & Utilities
服务管理和控制组件,主要用来回滚操做、恢复数据、数据的复制、迁移、元数据的管理等。
2.Connection Pool:链接池
链接池,对应逻辑架构的链接层,主要用来管理用户链接,包括监听、接收客户端请求,转发请求到相应的线程管理模块(该模块负责维护这些线程,包括建立、线程cache,可有线程池实现),还有链接的权限认证工做。
3.SQL Interface:SQL接口
各类SQL接口,用来接收管理SQL命令,好比DML、DDL操做,存储过程,视图,触发器等。
4.Parser:解析器
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
主要功能:
a . 将SQL语句进行语义和语法的分析,分解成数据结构,而后按照不一样的操做类型进行分类,而后作出针对性的转发到后续步骤,之后SQL语句的传递和处理就是基于这个结构的。
b. 若是在分解构成中遇到错误,那么就说明这个sql语句是不合理的。
5.Optimizer: 查询优化器
优化SQL语句,好比常量转换与计算、无效代码排除、AND/OR等等优化。查询优化器必要的时候还会询问存储引擎,计算语句执行消耗,从而得出最优策略去执行该SQL命令。
6.Cache & Buffer: 查询缓存
他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 作一个对应。该 Query 所取数据的基表发生任何数据的变化以后, MySQL 会自动使该 query 的Cache 失效。在读写比例很是高的应用系统中, Query Cache 对性能的提升是很是显著的。固然它对内存的消耗也是很是大的。
若是查询缓存有命中的查询结果,查询语句就能够直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。好比表缓存,记录缓存,key缓存,权限缓存等
7.存储引擎
目前只有MySQL实现了插件式多存储引擎(加了一层抽象层对接下面的存储数据层),其余数据库基本上使用单一的存储引擎。MySQL的存储引擎是基于表的,每一个表可选择本身须要的存储引擎。编程