mysql学习笔记 - sql执行过程

Mysql基础框架分析
基本架构概览

mysql基本架构核心部分为连接器,查询缓存,分析器,优化器,执行器,具体如下图:
在这里插入图片描述
1.连接器:用于身份认证和权限相关
2.查询缓存:查询语句先通过缓存进行搜索(作用不大,后续版本已经移除)
3. 分析器:用于进行sql语法正确性检查
4. 优化器:将sql进行优化,按照Mysql认为最优的方式进行执行。
5. 执行器:执行语句,从存储引擎返回数据。

简单来说Mysql分为Server层和存储引擎层。
1.Server层:主要包括用户合法性以及权限校验(连接器)查询缓存,分析器,优化器,执行器等。所有挎存储引擎的功能都在这一层实现。例如存储过程,触发器,视图,函数等。还有一个通用的binlog日志模块。

2.存储引擎:主要负责数据的存储和读写,采用可以替换的插件式架构,支持InnoDb,MyIsam等,其中InnoDb引擎带有日志模块redolog。

执行过程分析
  1. 查询语句执行过程分析
    例如:SELECT * FROM test1 WHERE num1 = 10000 and num2=‘10000’;
 (1). 检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,会先查询缓存,命中缓存直接返回,否则进行下一步
 (2).通过分析器进行词法分析,提取SQL语句的关键元素,比如上述查询语句关键字select,查询表 test1,查询条件num1=10000,然后判断这个查询语句是否有语法错误,关键字是否正确,如果没有进入下一步。
 (3). 根据优化器确定执行方案,上述sql语句存在两种执行顺序
   1. 先查询num1=10000 在查询num2=‘10000’
   2. 先查询num2=‘10000’ 在查询num1=10000;
  此时,优化器会根据优化算法,确定最优的执行方案
 (4). 执行器根据上述优化后的sql语句执行具体的执行过程,并从存储引擎中获取数据进行返回。 
  1. 更新语句执行过程分析
    例如:update test1 set num1 = 10001 where num1 = 10000 and num2=‘10000’;

更新语句执行过程与上类似,只不过在执行器执行更新操作时,存储引擎会记录相关的更新日志。Mysql自带binlog日志模块,innodb提供redolog模块。

具体记录流程如下:Innodb引擎把数据保存在内存中,同时记录redolog,此时redolog进入prepare状态,然后告诉执行器更新成功,随时可以提交,执行器收到通知以后记录binlog,然后调用引擎接口提交redolog进入commit状态。

为什么要有redolog以及redolog两阶段提交的作用
  1. 为什么要有redolog?
    并不是只有一个日志模块不行,事实上,redolog是innodb引擎通过redolog来支持事务的。

2.为什么要有二阶段提交?
(1). 如果先写redolog直接进行提交,在记录binlog,如果在redolog记录完成后,数据库宕机,当服务恢复时,根据redolog进行数据恢复,此时binlog并没有记录相关数据,从库不会进行同步,此时主从同步也会丢失这一条数据.
(2).如果先写binlog在写redolog,此时,如果binlog写完,机器异常重启,由于没有redolog,无法恢复这一条记录,但是binlog又有这一条记录,从库从binlog中同步这一条数据,造成从库有而主库无,从而会造成数据不一致。

如果采用redolog两阶段提交,写完binlog后,在提交redolog就会防止出现上述问题,从而保证数据一致性,这主要由Mysql处理机制决定,Mysql处理过程如下:

  1. 如果redolog已经commit,则毫不犹豫的把事务提交。
  2. 如果redolog处于prepare状态,则去判断事务对应的binlog是否完整,是则提交事务,否,则回滚事务。
    两阶段提交,其实是为了保证redolog和binlog的逻辑一致性,从而保证主从数据库的数据一致性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值