MySQL体系分为两部分:MySQL server层 和 存储引擎层。
1 MySQL Server层逻辑体系结构
Server 层及整个MySQL逻辑体系图如下:
MySQL逻辑系统架构分为3层:
- 应用层
- MySQL服务层
- 存储引擎层
1.1 应用层
应用层是MySQL体系架构的最上层,它可其他client-server架构一样,主要包含如下内容:
连接处理
用户鉴权
安全管理
1.连接处理:
当一个客户端向服务端发送连接请求后,MySQL server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池,减少了创建线程和释放线程所花费的时间。
2.用户鉴权
当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行鉴权处理,MySQL鉴权依据是: 用户名,客户端主机地址和用户密码
3.安全管理
当客户连接到MySQL server后,MySQL server会根据用户的权限来判断用户具体可执行哪些操作。MySQL 提供的部分权限的如下:
-
mysql> show privileges /G;
-
*************************** 1. row ***************************
-
Privilege: Alter
-
Context: Tables
-
Comment: To alter the table
-
*************************** 2. row ***************************
-
Privilege: Alter routine
-
Context: Functions,Procedures
-
Comment: To alter or drop stored functions/procedures
-
*************************** 3. row ***************************
-
Privilege: Create
-
Context: Databases,Tables,Indexes
-
Comment: To create new databases and tables
1.2 MySQL 服务层
该层是MySQL Server的核心层,提供了MySQL Server数据库系统的所有逻辑功能,该层可以分为如下不同的组件:
- MySQL Management Server & utilities(系统管理)
- SQL Interface(SQL 接口)
- SQL Parser(SQL 解析器)
- Optimizer (查询优化器)
- Caches & buffers(缓存)
1.2.1 MySQL Management Server & utilities(系统管理)
提供了丰富的数据库管理功能,具体如下:
- 数据库备份和恢复
- 数据库安全管理,如用户及权限管理
- 数据库复制管理
- 数据库集群管理
- 数据库分区,分库,分表管理
- 数据库元数据管理
1.2.2 SQL Interface(SQL 接口)
SQL接口,接收用户的SQL命令并进行处理,得到用户所需要的结果,具体处理功能如下:
- Data Manipulation Language (DML).
- Data Definition Language (DDL).
- 存储过程
- 视图
- 触发器
1.2.3 SQL Parser(SQL 解析器)
解析器的作用主要是解析查询语句,最终生成语法树。首先解析器会对查询语句进行语法分析,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。
1.2.4 Optimizer(查询优化器)
优化器的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式。
1.2.5 Caches & buffers(缓存)
包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如表缓存、记录缓存、key缓存、权限缓存等。
1.3 存储引擎层
1.3.1 存储引擎
存储引擎是MySQL中具体与文件打交道的子系统,也是MySQL最有特色的地方。MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL AB公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。
1.3.2 物理文件
物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等。
2 InnoDB体系结构(存储引擎层)
MySQL本身支持的存储引擎还是比较多的,目前大多数人用到的还是Innodb和MyISAM,其中MyISAM在MySQL 8.0以后将不在支持。默认的引擎是innodb。
innodb的整个体系结构就是由多个内存块组成的缓冲池及多个后台进程组成。包括三部分内存、进程、磁盘文件:
- 内存:包含insert_buffer、data_buffer、index_buffer、redo_log_buffer
- 内存刷新到磁盘的机制:redo_log_buffer由innodb_flush_log_at_trx_commit参数控制,bin_log由sync_binlog参数控制。
- 线程:master thread、redo log thread、read thread、write thread、page clear thread
- 磁盘:redo log、 bin log、undo log
innodb体系结构如下图所示:
2.1 innodb内存结构
innodb的内存结构可以分为SGA(系统全局区)和PGA(程序缓存区)
SGA:
- innodb_buffer_pool:用来缓存数据、索引、插入缓冲、数据字典
- innodb_log_buffer:事务在内存中的缓冲,即redo log buffer的大小
- innodb_addition_mem_pool_size:保存字典信息及其他数据结构的内存池
PGA:
- sort_buffer_size:SQL语句在内存中的临时排序
- join_buffer_size:表连接使用,用于BKA
- read_buffer_size:表顺序扫描的缓存,只能应用于MyISAM表存储引擎
- read_rnd_buffer_size:MySQL随机读缓冲区大小,用于做mrr
- tmp_table_size:SQL语句在排序或者分组时没有用到索引,就会使用临时表空间
- max_heap_table_size:管理heap、memory存储引擎表
2.2 innodb的进程
2.2.1 master thread
四个循环,主循环、后台循环、刷新循环、暂停循环,其中主循环分为两种状态1秒和10秒。
1s循环:
- 刷新日志到磁盘
- 刷新脏数据到磁盘
- 执行合并插入缓冲操作
- 产生checkpoint
- 删除无用的table cache
- 如果当前没有用户转入后台循环
10s循环:
- 刷新日志到磁盘
- 刷新脏数据到磁盘
- 执行合并插入缓冲操作
- 产生checkpoint
- 清除无用的undo 页
2.2.2 IO_thread
默认MySQL应该是开启了10个IO_thread,其中4个read_thread,4个write_thread,1个redo_log thread 1个insert buffer thread。
redo log buffer负责将日子缓冲中的内容刷新到redo log文件中,insert buffer thread,将插入缓冲中的内容刷新到磁盘,read/write thread是数据度的读写请求线程。
2.2.3 page clean thread
负责将脏数据刷新到磁盘的线程
2.2.4 purge thread
负责删除无用undo页
还没有内容