mysql 一次数据更新过程(undo redo binlog 内存缓冲池扮演了什么角色)

本文详细介绍了MySQL中一次数据更新的过程,包括解析SQL、更新内存缓冲池、写入undo log、redo log和binlog,以及事务提交与数据刷盘。讨论了如何确保数据一致性,如redo log的刷盘策略和binlog的同步选项。
摘要由CSDN通过智能技术生成

介绍

本篇博文是自己学习儒猿技术窝)​​​​​中:《从零开始带你成为MySQL实战优化高手》专栏课程,进行的总结,因为老师写的很好,所以很大一部分直接拿过来使用。

如果想学习完整的知识,请支持正版,地址:从零开始带你称为MySQL实战优化高手(儒猿技术窝)

本文主要讲解了一次数据更新在mysql中经历了哪些过程。

先直接看下我们会讲到哪些步骤,文章中 主要有以下9个步骤:

  • (1)更新语句经过 解析,优化 生成执行计划,交由执行器调用存储引擎接口(注:执行器会多次调用存储引擎接口,并不是一次完成)
  • (2)查询旧值,先去内存缓冲区查看是否有数据,如果没有,从磁盘中加载到内存,并将旧值写入到 Undo log 日志中,用于回滚数据
  • (3)更新内存中的数据(注:磁盘仍为旧数据)
  • (4)将操作写入到Redo Log 中
  • (5)Redo Log根据刷盘策略刷到磁盘
  • (6)准备提交事务,写入binlog 日志(注:binlog也有自己的刷盘策略)
  • (7)把本次更新对应的binlog文件名称和这次 更新的binlog日志在文件里的位置,都写入到redo log日志文件里去,同时在redo log日志文件里写入一个commit标 记。
  • (8)事务完成
  • (9)mysql会有个后台线程将内存数据刷入到磁盘

整体的流程图如下:

更新语句

首先假设我们有一条SQL语句是这样的:

update users set name='xxx' where id=10

那么我们先想一下这条SQL语句是如何执行的?

首先肯定是我们的系统通过一个数据库连接发送到了MySQL上,然后肯定会经过SQL接口、解析器、优化器、执行器 几个环节,解析SQL生成解析树,优化,选取根据Mysql认为最优的执行计划(注:Mysql有着自己的评分算法,在精准度和性能上进行了平衡,因此选取的有可能不是真正的最优的执行计划,但是问题不大,一般来说,都是比较不错的,不要轻易尝试让SQL按自己的想法执行),接着去由执行器负责这个计划的执行,调用InnoDB存储引擎的接口去执 行。

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值