MySQL的各个模块以及工作原理(底层)

1、    MySQL的各个模块
a)    初始化模块
初始化模块在数据库启动的时候,对整个数据库做的一些初始化操作,例如各种系统变量的初始化,各种缓存,存储引擎的初始化设置等等。
b)    核心API
核心API实现了数据库底层操作的优化功能,其中主要包括IO操作,格式化输出,高性能存储数据结果算法的优化,字符串的处理,其中最主要的是内存管理。
c)    网络交互模块
底层相互交互的抽象接口,对外提供可以接受和发送数据的API接口,其他模块需要交互的时候,可以通过API进行接口调用。
d)    服务器和客户端交互协议模块
服务器采用C/S形式访问数据库,数据库连接使用MySQL C/S交互协议模块,实现了客户端和服务端交互过程中所需要的一些独特的协议,这些协议都是建立在现有的网络协议上的。
e)    用户模块
主要功能用于控制用户登录连接的权限和用户管理。
f)    访问控制模块
用于监控用户的每一个操作,根据用户模块中不同的用户授权,以及根据其数据库的各种约束来控制用户对数据的访问。用户模块和访问控制模块结合起来,就组合了MySQL数据库的权限管理功能。
g)    连接管理,连接线程,线程管理
连接管理模块负责监听MySQL server的各种请求,根据不同请求,然后转发到线程管理模块,各个客户请求都会被数据库自动分配一个独立的线程为其服务,而连接线程的主要工作是负责MySQL Server与客户端通信,线程管理模块负责管理这些生成的线程。
h)    转发模块
客户端连接MySQL后会发送一些查询语句,在Server里面,连接线程接收到客户端的一个请求后,会直接将查询转发到各个相应的处理模块,转发模块主要就是根据查询语句语法分析,然后转发给不同的模块处理。
i)    缓存模块
将客户端的查询的请求返回的结果集保存到缓存中,与查询的一个hash值对应,在查询的基表发生任何数据变化后,MySQL会自动将其查询的缓存失效,在读写比例非常高的应用系统中,查询缓存对性能的提高非常显著。
j)    优化器模块
将客户端发送的查询请求,在之前算法的基础上分析,计算出一个最优的查询策略,优化之后会提高查询访问的毒素,最后根据其最优策略返回查询语句。
k)    表变更管理模块
负责完成DML和DDL的查询,如insert,update等语句的处理。
l)    表维护模块
用于检测表的状态,分析,优化表结构,以及修复表。
m)    系统状态管理模块
在客户端请求系统状态的时候,系统状态模块主要负责将各种状态的数据返回给用户,最常用的一些查询状态的命令包括show status ,show variables等,都是通过这个模块负责返回的。
n)    表管理器
维护系统生成的表文件,将各个表结构的信息缓存起来,另外该模块还管理表级别的锁。
o)    日志记录模块
负责将整个数据库逻辑层的日志文件,包括错误日志二进制文件以及慢查询日志等。
p)    复制模块
复制模块分为master和slave模块两部分,master模块主要负责复制环境中读取master端的binary日志,以及slave端的IO线程交互工作。Slave模块主要有两个线程,一个负责从master请求和接受binary日志,并写入IO线程。另一个是从relay log读取日志事件,然后解析成可以在Slave端执行的命令,然后交给Slave的SQL线程。
q)    存储引擎接口模块
MySQL实现了其数据库底层存储引擎的插件式管理,将各种数据处理高度抽象化。

 

2、    MySQL工作原理
MySQL启动后,MySQL的初始化模块就从系统配置文件中读取系统参数和命令参数,并按照参数初始化整个系统,同时存储引擎也会启动,当初始化工作结束后,连接管理模块会监听并接受客户端的程序,连接管理模块会连接请求转发给线程管理模块去请求一个连接线程。
线程模块街道请求之后会调用用户模块进行授权检查,通过检查后,会检测线程池里是否有空间连接线程,如果有,就取出跟客户端连接上,如果没有,则新建一个新的线程来与客户端建立连接。
MySQL数据库的请求有两种,一种是需要命令解析和分发模块解析才能执行请求的操作,另一种是不需要转发就可以直接执行的命令。此时,如果初始化阶段开启日志功能,这时候日志模块将请求记入日志,不管哪种请求,都会记录到日志。
Query类型的请求,会将控制权将诶query解析器,query解析器会检查是否是select类型的查询,如果是,则启动查询缓存模块,此时会查询缓存中是否存在结果集,如果存在,则直接将缓存中的数据集返回给连接线程模块,之后连接线程会将数据返回给客户端,如果没有缓存,或者是一个不可以被缓存的查询,此时查询解析器会进行相应的处理,通过查询分发器给相关的处理模块。
如果解析器结果是DML/DDL,则交给变更管理模块,如果是一些检查,修复类的查询,则交给表维护模块去处理;如果是一条被没有缓存的查询语句,则交给查询优化模块。实际上表变更管理器又分为若干小的模块,例如:insert处理器,delete处理器,update处理器,create处理器以及alter处理器这些小模块来负责不同的DML和DDL。总之,查询优化器,表变更模块,表维护模块,复制模块,状态模块都是根据命令解析器的结果不同而分发给不同类型的模块。
当一条命令执行完成之后,控制权都会还给连接线程模块,在上面各个模块处理中,各个模块都依赖与整个MySQL的核心api模块,比如内存管理,文件IO,字符串处理等。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值