问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 中 一条SQL从程序发出后 到 数据库执行返回结果都经历了哪些具...

发布网友 发布时间:2022-04-26 03:59

我来回答

3个回答

懂视网 时间:2022-04-30 03:04

Mysql体系结构及sql执行过程总结

一、体系结构图

技术分享

 

各模块说明:

1.Connectors:各应用程序与SQL的交互

2. Management Serveices & Utilities:系统管理和控制工具

3.Connection Pool:连接池

  管理缓冲用户连接,线程处理等需要缓存的需求

4.SQL Interfaces:SQL接口

  接受用户的SQL命令,并且返回用户需要查询的结果。例如select from就是调用SQL Interface

5.Parser:解析器

  (1)将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的

 (2) 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

6.Optimizer:查询优化器

  SQL语句在查询之前会使用查询优化器对查询进行优化,使用的是“选取-投影-联接”策略进行查询。

例如:select uid,name from user where gender = 1;

这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤

这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤

将这两个查询条件联接起来生成最终查询结果

 

7.Cache&Buffer:查询缓存

  如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

8.Engine:存储引擎

  存储引擎是MySql中具体的与文件打交道的子系统。


二、各个存储引擎介绍

1. myisam存储引擎:不支持事务、表级锁、全文索引,其中.myd文件存放数据文件,.myi文件存放索引文件,.frm文件存放表结构定义信息

2. innodb存储引擎:支持事务、行级锁、支持外键,其中.frm文件存放表结构定义信息,.ibd文件存放表的数据和索引、mysql5.6默认使用独立表空间

可以使用命令查看:

mysql> SHOW VARIABLES LIKE "innodb_file_per_table";

技术分享

3. ndb存储引擎:集群存储引擎,share nothing,可提高可用性

4. memory存储引擎:数据存放在内存中,表锁,并发性能差,默认使用哈希索引

5. archive存储引擎:只支持insert和select zlib算法压缩1:10,适合存储归档数据如日志等、行锁

6. maria存储引擎:目的取代myisam、缓存数据和索引、行锁、mvcc

7.blackhole存储引擎:不保存任何写入的数据,常用于binlog转储


三、mysql物理文件组成

1.日志文件

1)错误日志

存放路径:默认保存在数据目录下以.err文件命名

日志功能:记录服务运行过程中所有较为严重的警告和错误信息,以及每次启动和关闭的详细信息。

2)二进制日志:

存放路径:默认保存在数据目录下,由于二进制日志极为重要,通常不和数据一起存放,需另外定义存放目录,通过修改配置文件my.cnf,例如:

log-bin = /home/logs/mysql/master-bin

日志功能:记录数据库的所有改变信息,用于数据库同步及即时点恢复。

2.数据文件

每创建一个库都会在数据目录下生产相应的目录文件

1).frm文件

存放路径:所属数据库的目录文件夹下

记录信息:与表相关的元数据(meta)信息、表结构的定义信息

属性:每个存储引擎都有该文件

2).MYD文件

存放路径:所属数据库的目录文件夹下

记录信息:存放MyISAM表的数据

属性:MyISAM存储引擎专用

3).MYI文件

存放路径:所属数据库的目录文件夹下

记录信息:存放MyISAM表索引相关信息

属性:MyISAM存储引擎专用

4).ibd文件

存放路径:所属数据库的目录文件夹下

记录信息:存放innodb表数据和索引

属性:innodb存储引擎专用

3.Replication相关文件

主从复制下存在的文件

1)master.info文件

存放路径:Slave端的数据目录下

记录信息:该Slave的Master端的相关信息

2)relay log

存放路径:Slave端的数据目录下

记录信息:存放Slave端的I/O线程从Master端所读取到的Binary Log信息

3)relay-log.info文件

存放路径:Slave端的数据目录下

记录信息:存放通过Slave的I/O线程写入到本地的relay log的相关信息

 

四、mysql执行过程

技术分享

1.初始化模块

在服务启动的时候,做初始化操作,包含buffer、cache结构的初始化和内存空间的申请,系统变量的初始化设定,存储引擎初始化设置等。

2.连接管理模块

系统初始化结束后,连接管理模块启动监听程序,准备接受客户端的请求;

当一个客户端通过网络连接到MySQL服务器时,连接管理模块会监听到这个请求,通过MySQL自己定义的协议,执行相关的底层任务后,连接管理模块将请求转发给线程管理;

3.连接进程模块

线程管理会提供一个连接线程来处理请求连接,如果线程缓存(Thread Cache)中有空闲的连接线程,那么就会从线程缓存中直接取一个连接线程,否则新创建一个连接线程;

4.用户模块

连接线程会调用用户模块,进行授权检查,验证用户访问的合法性(用户是否有权访问数据库服务器,用户密码是否正确等),一旦验证通过就开始处理请求

5.命令分发器(即sql接口)

接受用户的sql命令,对于命令不需要调用Parse就可以直接执行

对于Query,需要进行Query解析和转发模块的解析,在Query解析器进行分析,如果是一个SELECT类型的Query,则调用查询缓存(Query Cache),检查是否存在相同的查询语句,如果存在则直接将cache中的数据返回,如果不存在或者不是SELECT类型的Query,则将此Query返回解析器。

6.命令解析器

如果是SELECT类型,解析器会将控制权交给查询优化器,

如果是DML或DDL语句,则会交给表变更管理模块,

如果是一些更新统计信息,检测,修复和整理类的Query,则会交给表变更管理模块

如果是请求系统状态类的,则会交给状态模块

7.访问控制模块

以上各个模块在收到Query解析与分发模块分发过来的请求后,首先会通过访问控制模块检查连接用户是否有访问目标表和目标字段的权限,如果有相关权限,就会调用表管理模块请求相应的表,并获取相应的锁。

8.表管理模块

在打开表后,根据表的相关meta信息,判断表的存储引擎类型和相关信息。

根据表的存储引擎类型,提交请求给存储引擎接口,调用对应的存储引擎实现模块进行处理。

 

当一条query或者一个command处理完成之后,控制权交还给连接线程模块。如果处理成功,则将处理结果通过连接线程反馈给客户端。如果处理过程发生错误,也会将相应的错误信息发送给客户端,然后连接线程模块会进行相应的清理工作,并继续等待后面的请求。


Mysql体系结构及sql执行过程总结

标签:mysql体系结构及sql执行过程总结

热心网友 时间:2022-04-30 00:12

获得连接-执行相应的sql命令操作(语法检查、执行操作)-关闭连接

热心网友 时间:2022-04-30 01:30

语言->执行->返回相应结果. 就这几步,很简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我家300多k的网速为什么玩cf总是很迟钝,连切枪都很慢 CF切换枪的速度很慢 ...东西需要输入apple ID密码 我不知道怎么办?更新微信需要appleID_百... ...一遍id苹果手机的每次更新软件都需要输入id和密码请问怎么解决_百度... ...ID 我不知道密码是什么,也不懂怎么申请,想下个软件都下不了... 微信直播王者荣耀有收益吗 王者荣耀新手主播能挣多少 华为是如何进入手机市场的? ...用的那种安在船边上承鱼竿的那个座子中文叫什么?就是下图中的那个... 放在哪里不动钓鱼的叫什么? sql语句问题,mysql中的sql语句 mysql 同一条SQL语句,执行结果不一样。这是为什么? MYSQL中select为什么不可以多条同时执行 mysql的select查询语句,一条语句得出2个结果 请帮解释一下mysql的select语句里面的这些表示方法? vc++中,我用mysql_query 执行了一条select语句,返回0执行成功,那返回的... JDBC查询MySQL时select语句的疑问 mysql数据库 一个select 查询语句问题 一条MySQL的select语句,为什么性能会差别这么大 mysql一条select语句的结果 一条select语句中,mysql内部的底层运行机制是怎样的? 华为10调整音量键的提示音怎样关闭 耳垂后经常长脓包,而且疼! 为什么耳垂后面长一粒东西? 耳垂后面长有小水疱怎么回事??? 我耳垂后面长了个黄豆大小的硬包。不按也有点痛。手按的话 很痛 耳垂后长了个包软软的 耳垂后面长了个黄豆大小的疙瘩是怎么回事? 耳垂后长了个包、摸起来硬硬的、表面看不出问题、碰到还会疼、是怎么回事 耳垂后面长了不知道是什么东西,不疼也不痒、看也看不出来,就是摸上去感觉是小疙瘩一样? 关于Mysql的语句的一个疑问? 关于mysql中一条sql语句 豆的拼音 古代的“豆”是什么意思啊? 豆子有多少种类呢? 豆是什么豆? 与“豆”有关的成语 国家用和田青玉是最好的料吗,值多少钱一克 你知道和田玉的产地都在哪里吗? 和田玉青玉手镯鉴别,这个是真的吗,价值大概有多少呢? 有没有懂和田玉的帮我看下这是哪的料子? 与功效和田玉墨青玉空间 鉴定和田青玉 和田玉山料,请问下是哪里的料子,3700值得入手吗 Microsoft Office支持看pdf和图片吗? 微信视频怎么设置不在线 怎么设置微信不在线状态 怎样设置微信不在线状态 微信在线状态怎么设置 微信如何设置离开状态