设为首页 收藏本站
查看: 305|回复: 0

[经验分享] Mysql体系结构及sql执行过程总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-10 08:55:13 | 显示全部楼层 |阅读模式
一、体系结构图
QQ截图20150610085404.png
各模块说明:
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";
wKioL1V29pvxa2TzAAB5y7SYYAA667.jpg
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)relaylog
存放路径:Slave端的数据目录下
记录信息:存放Slave端的I/O线程从Master端所读取到的Binary Log信息
3)relay-log.info文件
存放路径:Slave端的数据目录下
记录信息:存放通过Slave的I/O线程写入到本地的relay log的相关信息
四、mysql执行过程
wKiom1V29Q7AVgyJAAKYnszveQU996.jpg
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处理完成之后,控制权交还给连接线程模块。如果处理成功,则将处理结果通过连接线程反馈给客户端。如果处理过程发生错误,也会将相应的错误信息发送给客户端,然后连接线程模块会进行相应的清理工作,并继续等待后面的请求。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-75676-1-1.html 上篇帖子: MySQL主从复制 下篇帖子: MySQL安装、备份与恢复思维导图
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表