mysql SQL Layer各个模块介绍

  • 时间:
  • 浏览:0
  • 来源:uu快3玩法_uu快3新平台_棋牌



10、Query 优化器模块

Query 优化器,顾名思义,或者 优化客户端请求的query,根据客户端请求的query 一段话,和数据库中的有些统计信息,在一系列算法的基础上进行分析,得出另另四个最优的策略,告诉里面的线程池池运行怎么取得你什儿 query 一段话的结果。



13、系统情況管理模块

系统情況管理模块负责在客户端请求系统情況的事先,将各种情況数据返回给用户,像DBA 常用的各种show status 命令,show variables 命令等,所得到的结果都会 由你什儿 模块返回的。

当一根 query 可能另另四个command 处置完成(成功可能失败)事先,控制权都会交还给连接线程池池运行模块。可能处置成功,则将处置结果(可能是另另四个Result set,也可能是成功可能

失败的标识)通过连接线程池池运行反馈给客户端。可能处置过程中存在错误,也会将相应的错误信息发送给客户端,或者 连接线程池池运行模块会进行相应的清理工作,并继续等待时间里面的请求,重复里面提到的过程,可能完成客户端断开连接的请求。

SQL Layer 中包含了多个子模块,下面我将逐个做一下简单的介绍:

一帮人通过启动MySQL,客户端连接,请求query,得到返回结果,最后退出,事先一整个过程来进行分析:

5、用户模块

用户模块所实现的功能,主要包括用户的登录连接权限控制和用户的授权管理。他就像MySQL 的大门守卫一样,决定有无给来访者“开门”。

当整个系统初始化很久 开始英语 英语 英语 后,由连接管理模块接手。连接管理模块会启动处置客户端连接请求的监听线程池池运行,包括tcp/ip 的网络监听,还有unix 的socket。这事先,MySQL Server 就基本启动完成,准备好接受客户端请求了。

1、初始化模块顾名思议,初始化模块或者 在MySQL Server 启动的事先,对整个系统做各种各样的初始化操作,比如各种buffer,cache 特性的初始化和内存空间的申请,各种系统变量的初始化设定,各种存储引擎的初始化设置,等等。

不过,对于表变更管理模块来说,可见的仅是存储引擎接口模块所提供的一系列“标准”接口,底层存储引擎实现模块的具体实现,对于表变更管理模块来说是透明的。他只需用调用对应的接口,并指明表类型,接口模块会根据表类型调用正确的存储引擎来进行相应的处置。

2、核心API

核心API 模块主或者 为了提供有些需用非常高效的底层操作功能的优化实现,包括各种底层数据特性的实现,特殊算法的实现,字符串处置,数字处置等,小文件I/O,格式化输

出,以及最重要的内存管理要素。核心API 模块的所有源代码都集中在mysys 和strings文件夹下面,有兴趣的读者需用研究研究。

当客户端请求和连接线程池池运行“互换暗号(互通协议)”接上头事先,连接线程池池运行就很久 开始英语 英语 英语 处置客户端请求发送过来的各种命令(可能query),接受相关请求。它将收到的query 一段话转

给Query 解析和转发模块,Query 解析器先对Query 进行基本的语义和语法解析,或者 根据命令类型的不同,有些会直接处置,有些会派发给有些模块来处置。

8、Query 解析和转发模块

在MySQL 中一帮人习惯将所有Client 端发送给Server 端的命令都称为query,在MySQLServer 里面,连接线程池池运行接收到客户端的另另四个Query 后,会直接将该query 传递给专门负责

将各种Query 进行分类或者 转发给各个对应的处置模块,你什儿 模块或者 query 解析和转发模块。其主要工作或者 将query 一段话进行语义和语法的分析,或者 按照不同的操作类型进行分类,或者 做出针对性的转发。





7、连接管理、连接线程池池运行和线程池池运行管理

连接管理模块负责监听对MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程池池运行管理模块。每另另四个连接上MySQL Server 的客户端请求都会被分配(或创建)另另四个连接线程池池运行为其单独服务。而连接线程池池运行的主要工作或者 负责MySQL Server 与客户端的通信,接受客户端的命令请求,传递Server 端的结果信息等。线程池池运行管理模块则负责管理维护哪此连接线程池池运行。包括线程池池运行的创建,线程池池运行的cache 等。

12、表维护模块

表的情況检查,错误修复,以及优化和分析等工作都会 表维护模块需用做的事情。



15、日志记录模块

日志记录模块主要负责整个系统级别的逻辑层的日志的记录,包括error log,binarylog,slow query log 等。



16、qq克隆好友 模块

qq克隆好友 模块又可分为Master 模块和Slave 模块两要素, Master 模块主要负责在Replication 环境中读取Master 端的binary 日志,以及与Slave 端的I/O 线程池池运行交互等工作。

Slave 模块比Master 模块所要做的事情稍多有些,在系统中主要体现在另另四个线程池池运行里面。另另四个是负责从Master 请求和接受binary 日志,并写入本地relay log 中的I/O 线程池池运行。另外另另四个是负责从relay log 中读取相关日志事件,或者 解析成需用在Slave 端正确执行并得到和Master 端完整篇 相同的结果的命令并再交给Slave 执行的SQL 线程池池运行。

可能解析器解析结果是一根 未被cache 的select 一段话,则将控制权交给Optimizer,也或者 Query 优化器模块,可能是DML 可能是DDL 一段话,则会交给表变更管理模块,可能是

有些更新统计信息、检测、修复和派发类的query 则会交给表维护模块去处置,qq克隆好友 相关的query 则转交给qq克隆好友 模块去进行相应的处置,请求情況的query 则转交给了情況派发报告模块

14、表管理器

你什儿 模块从名字上看来很容易和里面的表变更和表维护模块相混淆,或者 其功能与变更及维护模块却完整篇 不同。一帮人知道,每另另四个MySQL 的表都会 另另四个表的定义文件,也或者 *.frm文件。表管理器的工作主要或者 维护哪此文件,以及另另四个cache,该cache 中的主要内容是各个表的特性信息。此外它还维护table 级别的锁管理。

17、存储引擎接口模块存储引擎接口模块需用说是MySQL 数据库中最有特色的有些了。目前各种数据库产品中,基本上必须MySQL 需用实现其底层数据存储引擎的插件式管理。你什儿 模块实际上或者 另另四个抽象类,但正是可能它成功地将各种数据处置强度抽象化,才成就了今天MySQL 可插拔存储引擎的特色。

通过一例子,讲解各个模块协同工作的过程:



11、表变更管理模块

表变更管理模块主或者 负责完成有些DML 和DDL 的query,如:update,delte,insert,create table,alter table 等一段话的处置。



3、网络交互模块

底层网络交互模块抽象出底层网络交互所使用的接口api,实现底层网络数据的接收与发送,以方便有些各个模块调用,以及对你什儿 要素的维护。所有源码都会 vio 文件夹下面。

可能在里面的过程中,相关模块使数据库中的数据存在了变化,或者 MySQL 打开了binlog功能,则对应的处置模块都会调用日志处置模块将相应的变更一段话以更新事件的形式记录到相关参数指定的二进制日志文件中。在里面各个模块的处置过程中,每每个人 的核心运算处置功能要素都会强度依赖整个MySQL的核心API 模块,比如内存管理,文件I/O,数字和字符串处置等等。

9、Query Cache 模块Query Cache 模块在MySQL 中是另另四个非常重要的模块,他的主要功能是将客户端提交给MySQL 的Select 类query 请求的返回结果集cache 到内存中,与该query 的另另四个hash 值做另另四个对应。该Query 所取数据的基表存在任何数据的变化事先,MySQL 会自动使该query 的Cache 失效。在读写比例非常高的应用系统中,Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。

4、Client & Server 交互协议模块

任何C/S 特性的软件系统,都肯定会有我每每个人 独有的信息交互协议,MySQL 或者 例外。MySQL的Client & Server 交互协议模块要素,实现了客户端与MySQL 交互过程中的所有协议。当然哪此协议都会 建立在现有的OS 和网络协议之上的,如TCP/IP 以及Unix Socket。

当连接管理模块监听到客户端的连接请求(借助网络交互模块的相关功能),双方通过Client & Server 交互协议模块所定义的协议“寒暄”几句事先,连接管理模块就会将连接

请求转发给线程池池运行管理模块,去请求另另四个连接线程池池运行。线程池池运行管理模块马上又会将控制交给连接线程池池运行模块,告诉连接线程池池运行模块:现在我这边有连接请求过来了,需用建立连接,你赶快处置一下。连接线程池池运行模块在接到连接请求后,首先会检查当前连接线程池池运行池中有无有被cache 的空闲连接线程池池运行,可能有,就取出另另四个和客户端请求连接上,可能没人空闲的连接线程池池运行,则建立另另四个新的连接线程池池运行与客户端请求连接。当然,连接线程池池运行模块并都会 在收到连接请求后马上就会取出另另四个连接线程池池运行连和客户端连接,或者 首先通过调用用户模块进行授权检查,必须客户端请求通过了授权检查后,他才会将客户端请求和负责请求的连接线程池池运行连上。



当一帮人执行启动MySQL 命令事先,MySQL 的初始化模块就从系统配置文件中读取系统参数和命令行参数,并按照参数来初始化整个系统,如申请并分配buffer,初始化全局变量,以及各种特性等。一并各个存储引擎也被启动,并进行每每个人 的初始化工作。

Storage Engine Layer主要负责底层数据存取的实现,由多种存储引擎一并组成。

6、访问控制模块

造访客人进门了就需用想干嘛就干嘛么?为了安全考虑,肯定必须没人随意。这事先就需用访问控制模块实时监控客人的每另另四个动作,给不同的客人以不同的权限。访问控制模块实现的功能或者 根据用户模块中各用户的授权信息,以及数据库自身特有的各种约束,来控制用户对数据的访问。用户模块和访问控制模块两者结合起来,组成了MySQL 整个数据库系统的权限安全管理的功能。

实际上表变更管理模块根据所对应的处置请求的不同,是分别由insert 处置器、delete处置器、update 处置器、create 处置器,以及alter 处置器哪此小模块来负责不同的DML和DDL 的。在各个模块收到Query 解析与派发模块派发过来的请求后,首先会通过访问控制模块检查连接用户有无有访问目标表以及目标字段的权限,可能有,就会调用表管理模块请求相应的表,并获取对应的锁。表管理模块首先会查看该表有无可能存在于table cache 中,可能可能打开则直接进行锁相关的处置,可能没人在cache 中,则需用再打开表文件获取锁,或者 将打开的表交给表变更管理模块。当表变更管理模块“获取”打开的表事先,就会根据该表的相关meta 信息,判断表的存储引擎类型和有些相关信息。根据表的存储引擎类型,提交请求给存储引擎接口模块,调用对应的存储引擎实现模块,进行相应处置。

可能是另另四个Query 类型的请求,会将控制权交给Query 解析器。Query 解析器首先分析看是都会 另另四个select 类型的query,可能是,则调用查询缓存模块,让它检查该query 在

query cache 中有无可能存在。可能有,则直接将cache 中的数据返回给连接线程池池运行模块,或者 通过与客户端的连接的线程池池运行将数据传输给客户端。可能都会 另另四个需用被cache 的query类型,可能cache 中没人该query 的数据,没人query 将被继续传回query 解析器,让query解析器进行相应处置,再通过query 派发器派发给相关处置模块。

在MySQL 中,将客户端请求分为了一种类型:一种是query,需用调用Parser 也或者 Query 解析和转发模块的解析才不要 执行的请求;一种是command,不需用调用Parser 就需用直接执行的请求。可能一帮人的初始化配置中打开了Full Query Logging 的功能,没人Query 解析与转发模块会调用日志记录模块将请求计入日志,不管是另另四个Query 类型的请求还是另另四个command 类型的请求,都会被记录进入日志,好多好多 出于性能考虑,一般很少打开FullQuery Logging 的功能。

下面或者 mysql 的逻辑架构,sql layer主要负责如下功能:权限判断、sql解析、执行计划优化、query cache的处置等操作,哪此操作都会 在数据库系统处置底层数据事先的工作;

特性图如下: