首页 > 数据库 >02 SQL更新语句执行流程

02 SQL更新语句执行流程

时间:2024-02-19 15:44:40浏览次数:28  
标签:02 语句 log binlog InnoDB SQL 日志 redo

02 SQL更新语句执行流程

与查询流程不一样的是,更新流程还涉及两个重要的日志模块。

​ redo log(重做日志)和 binlog(归档日志)

redo log 物理日志 binlog 逻辑日志

redo log

WAL 的全称是 Write-Ahead Logging。

关键点就是先写日志,再写磁盘,用来提升更新效率。

具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写,并覆盖之前的记录。

write pos是当前记录的位置,check point 是当前要擦除的位置。

有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe


binlog

redo log 是 InnoDB 引擎特有的日志Server 层也有自己的日志,称为 binlog(归档日志)

redo log 和binlog的区别:

  1. redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
  2. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志(逻辑操作(原始sql语句)),记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
  3. redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

将 redo log 的写入拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"

图中浅色框表示是在 InnoDB 内部执行的,深色框表示是在执行器中执行的。

两阶段提交使得两份日志之间的逻辑一致。

具体原因

  1. 先写 redo log 后写 binlog。假设在 redo log 写完,binlog 还没有写完的时候,MySQL 进程异常重启。redo log 写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行 c 的值是 1。但是由于 binlog 没写完就 crash 了,这时候 binlog 里面就没有记录这个语句。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。

    如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。

  2. 先写 binlog 后写 redo log。如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以这一行 c 的值是 0。但是 binlog 里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog 来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。

如果不使用“两阶段提交”,那么 数据库的状态 就有可能和 用它的日志恢复出来的库 的状态不一致。


问:在什么场景下,一天一备会比一周一备更有优势呢?或者说,它影响了这个数据库系统的哪个指标?

答:一天一备的最长恢复时间更短,当然这个是有成本的,因为更频繁全量备份需要消耗更多存储空间,所以这个 RTO 是成本换来的,就需要你根据业务重要性来评估了。(用空间换取时间)。

标签:02,语句,log,binlog,InnoDB,SQL,日志,redo
From: https://www.cnblogs.com/itiancong/p/18021261

相关文章

  • 2024年2月铜组游记
    一开始,看了下一二题没有思路,然后看了下第三题秒杀,。然后发现自己想不出第一题,此时我的脑海中闪过一句话:打标出奇迹,骗分过样例。然后我真的发现了规律,想了一下发现还是很好证明的:(这里的正整数大于\(9\))因为首位没有为\(0\)的正整数,所以没有末尾为\(0\)的回文数,所以一个末尾为......
  • 2024.2.19
    BearandParadox你在打比赛,题\(i\)的初始分值为\(a_i\),须时间\(t_i\)做出,在时间\(x\)做出题\(i\)的得分为\(b_i=a_i\cdot(1-c\cdot\frac{x}{T})\),其中\(c\)为\([0,1]\)间的常数,\(T=\sumt_i\)。找到最大的\(c\),使得在所有总得分最大的情况下,\(\not\exist(i,......
  • Android家庭记账本开发第四天:SQLite数据库操作
    SQlite数据库是一个轻量级的数据库,被用在嵌入式设备上,2019年6月还在流行的两大移动终端操作系统,Android和ios都支持这款数据库。AndroidSDK中有一个包android.database.sqlite,其中专门对SQLite数据库进行了封装,并提供了一套供android使用的API。SQLiteOpenHelper 类包含一组用......
  • Burp Suite Professional 2023.12.1.5 (macOS, Linux, Windows) - Web 应用安全、测试
    BurpSuiteProfessional2023.12.1.5(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:BurpSuiteProfessional2024.1.1(macOS,Linux,Windows)-Web应用安全、测试和扫描,查看最新......
  • 从嘉手札<2024-2-19>
    人一旦设立目的就会本能的去摆脱目的达不到的痛苦感于是陷入了不断为目的服务的恶性循环而这个目的本身不需要有任何实质意义一个真正理性的人首先不敢保证自己的结论完全正确其次,他探索真理只是为了真理本身,而不是为了证明自己;最后,他不会轻易争论,除非对手和他是同一种人......
  • 【译】IEEE白皮书 6G 太赫兹技术的基本原理 2023版
    第一章简介太赫兹波是介于微波和光波之间的光谱区域,频率从0.1THz~10THz之间,波长在3mm~30μm之间。提供大块连续的频带范围以满足对Tbit/s内极高数据传输速率的需求,使该区域成为下一代无线通信(6G)的重点研究领域。预计在2030年左右实现商业部署,太赫兹区域在成像、光......
  • 2024-02-18-物联网C语言(8-结构体、共用体、枚举)
    8.结构体、共用体、枚举8.1结构体的概念和定义8.1.1基本概述构造类型:不是基本类型的数据结构也不是指针,它是若干个相同或不同类型的数据构成的集合。常用的构造类型有数组、结构体、共用体。数组用于保存多个相同类型的数据结构体用于保存多个不同类型的数据8.1.2概......
  • 01 MySQL的基本架构
    前言:记录对林晓斌老师的《MySQL实战45讲》课程学习路程。01MySQL的基本架构MySQL的逻辑架构图MySQL分为Server层和存储引擎层两部分。Server层功能:实现所有跨存储引擎的功能,比如存储过程、触发器、视图等。连接器、查询缓存、分析器、优化器、执行器等,以及......
  • 【2024】docker overlay2 迁移
    参考了很多文章,docker起不起来。报如下错误:docker.service:ServicehasmorethanoneExecStart=setting,whichisonlyallowedforType=oneshotservices.Refusing.关键是新的docker路径的配置方法不适用。参考官网 https://docs.docker.com/config/daemon/编辑da......
  • 微软 Office 2021 专业增强版,安装完自动激活
    123盘下载地址  MicrosoftOffice2021VL官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘(123pan.com)安装前先关闭windows系统自带的 病毒  微软办公软件套件MicrosoftOfficeLTSC2021专业增强版2024年01月批量许可版更新推送!Office2021正式版和Windows11......