mysql SQL Layer各个模块介绍

  • 时间:
  • 浏览:0
  • 来源:uu快3电脑版_uu快3和值_礼金

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



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

在MySQL 中,将客户端请求分为了四种 类型:四种 是query,促进 调用Parser 也某些Query 解析和转发模块的解析促进够执行的请求;四种 是command,不促进 调用Parser 就都促进 直接执行的请求。可能性亲戚亲戚大伙儿的初始化配置中打开了Full Query Logging 的功能,没办法 Query 解析与转发模块会调用日志记录模块将请求计入日志,不管是4个多Query 类型的请求还是4个多command 类型的请求,全版都是被记录进入日志,可是我有出于性能考虑,一般很少打开FullQuery Logging 的功能。

下面某些mysql 的逻辑架构,sql layer主要负责如下功能:权限判断、sql解析、执行计划优化、query cache的正确处理等操作,哪几个操作全版都是在数据库系统正确处理底层数据很久的工作;



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

query cache 中是否可能性存在。可能性有,则直接将cache 中的数据返回给连接多多线程 模块,某些通过与客户端的连接的多多线程 将数据传输给客户端。可能性全版都是4个多都促进 被cache 的query类型,可能性cache 中没办法 该query 的数据,没办法 query 将被继续传回query 解析器,让query解析器进行相应正确处理,再通过query 采集器采集给相关正确处理模块。

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

可能性在上方的过程中,相关模块使数据库中的数据存在了变化,某些MySQL 打开了binlog功能,则对应的正确处理模块全版都是调用日志正确处理模块将相应的变更励志的话 以更新事件的形式记录到相关参数指定的二进制日志文件中。在上方各个模块的正确处理过程中,各人的核心运算正确处理功能偏离 全版都是宽度依赖整个MySQL的核心API 模块,比如内存管理,文件I/O,数字和字符串正确处理等等。

12、表维护模块

表的请况检查,错误修复,以及优化和分析等工作全版都是表维护模块促进 做的事情。

17、存储引擎接口模块存储引擎接口模块都促进 说是MySQL 数据库中最有特色的某些了。目前各种数据库产品中,基本上只能MySQL 都促进 实现其底层数据存储引擎的插件式管理。四种 模块实际上某些4个多抽象类,但正是可能性它成功地将各种数据正确处理宽度抽象化,才成就了今天MySQL 可插拔存储引擎的特色。

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

形状图如下:



11、表变更管理模块

表变更管理模块主某些负责完成某些DML 和DDL 的query,如:update,delte,insert,create table,alter table 等励志的话 的正确处理。

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

某些更新统计信息、检测、修复和采集类的query 则会交给表维护模块去正确处理,克隆相关的query 则转交给克隆模块去进行相应的正确处理,请求请况的query 则转交给了请况采集报告模块

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



13、系统请况管理模块

系统请况管理模块负责在客户端请求系统请况的很久,将各种请况数据返回给用户,像DBA 常用的各种show status 命令,show variables 命令等,所得到的结果全版都是由四种 模块返回的。

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



10、Query 优化器模块

Query 优化器,顾名思义,某些优化客户端请求的query,根据客户端请求的query 励志的话 ,和数据库中的某些统计信息,在一系列算法的基础上进行分析,得出4个多最优的策略,告诉上方的多多多线程 怎样才能取得四种 query 励志的话 的结果。



7、连接管理、连接多多线程 和多多线程 管理

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

亲戚亲戚大伙儿通过启动MySQL,客户端连接,请求query,得到返回结果,最后退出,原来一整个过程来进行分析:

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

请求转发给多多线程 管理模块,去请求4个多连接多多线程 。多多线程 管理模块马上又会将控制交给连接多多线程 模块,告诉连接多多线程 模块:现在我这边有连接请求过来了,促进 建立连接,你赶快正确处理一下。连接多多线程 模块在接到连接请求后,首先会检查当前连接多多线程 池中是否有被cache 的空闲连接多多线程 ,可能性有,就取出4个多和客户端请求连接上,可能性没办法 空闲的连接多多线程 ,则建立4个多新的连接多多线程 与客户端请求连接。当然,连接多多线程 模块并全版都是在收到连接请求后马上就会取出4个多连接多多线程 连和客户端连接,某些首先通过调用用户模块进行授权检查,只能客户端请求通过了授权检查后,他才会将客户端请求和负责请求的连接多多线程 连上。

6、访问控制模块

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

14、表管理器

四种 模块从名字上看来很容易和上方的表变更和表维护模块相混淆,某些其功能与变更及维护模块却全版不同。亲戚亲戚大伙儿知道,每4个多MySQL 的表全版都是4个多表的定义文件,也某些*.frm文件。表管理器的工作主要某些维护哪几个文件,以及4个多cache,该cache 中的主要内容是各个表的形状信息。此外它还维护table 级别的锁管理。



16、克隆模块

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

Slave 模块比Master 模块所要做的事情稍多某些,在系统中主要体现在4个多多多线程 上方。4个多是负责从Master 请求和接受binary 日志,并写入本地relay log 中的I/O 多多线程 。另外4个多是负责从relay log 中读取相关日志事件,某些解析成都促进 在Slave 端正确执行并得到和Master 端全版相同的结果的命令并再交给Slave 执行的SQL 多多线程 。

当第第一根 query 可能性4个多command 正确处理完成(成功可能性失败)很久,控制权全版都是交还给连接多多线程 模块。可能性正确处理成功,则将正确处理结果(可能性是4个多Result set,也可能性是成功可能性

失败的标识)通过连接多多线程 反馈给客户端。可能性正确处理过程中存在错误,也会将相应的错误信息发送给客户端,某些连接多多线程 模块会进行相应的清理工作,并继续等候上方的请求,重复上方提到的过程,可能性完成客户端断开连接的请求。

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



2、核心API

核心API 模块主某些为了提供某些促进 非常高效的底层操作功能的优化实现,包括各种底层数据形状的实现,特殊算法的实现,字符串正确处理,数字正确处理等,小文件I/O,格式化输

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

3、网络交互模块

底层网络交互模块抽象出底层网络交互所使用的接口api,实现底层网络数据的接收与发送,以方便某些各个模块调用,以及对四种 偏离 的维护。所有源码全版都是vio 文件夹下面。



15、日志记录模块

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

当客户端请求和连接多多线程 “互换暗号(互通协议)”接上头很久,连接多多线程 就开使了了正确处理客户端请求发送过来的各种命令(可能性query),接受相关请求。它将收到的query 励志的话 转

给Query 解析和转发模块,Query 解析器先对Query 进行基本的语义和语法解析,某些根据命令类型的不同,某些会直接正确处理,某些会采集给某些模块来正确处理。

8、Query 解析和转发模块

在MySQL 中亲戚亲戚大伙儿习惯将所有Client 端发送给Server 端的命令都称为query,在MySQLServer 上方,连接多多线程 接收到客户端的4个多Query 后,会直接将该query 传递给专门负责

将各种Query 进行分类某些转发给各个对应的正确处理模块,四种 模块某些query 解析和转发模块。其主要工作某些将query 励志的话 进行语义和语法的分析,某些按照不同的操作类型进行分类,某些做出针对性的转发。

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

5、用户模块

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

4、Client & Server 交互协议模块

任何C/S 形状的软件系统,都肯定会有此人 独有的信息交互协议,MySQL 某些例外。MySQL的Client & Server 交互协议模块偏离 ,实现了客户端与MySQL 交互过程中的所有协议。当然哪几个协议全版都是建立在现有的OS 和网络协议之上的,如TCP/IP 以及Unix Socket。

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