#1 线程开始执行SQL更新请求之前,会创建事务,并且为当前线程分配一块内存空间叫做binlog cache

注意:binlog cache 是每一个线程分配一个;binlog cache大小受binlog_cache_size控制;如果binlog cache达到binlog_cache_size则将binlog cache内容移到一个临时文件中保存,但是这个文件不能超过max_binlog_cache_size,如果超过则报错;客户端断开连接,binlog cache释放

#2 SQL执行器从缓冲池Buffer Pool查找要更新的记录,并且对记录加锁。如果存在则进入第4步

#3 如果缓冲池不存在这条记录,则从磁盘加载到缓冲池,并且对记录加锁

#4 将更新前的值记录到undo log日志文件,方便回滚

#5 然后在内存更新记录

#6 将产生binlog event写入binlog cache

#7 因为修改后的记录,没有来得及刷入磁盘,有可能丢失数据,则将修改后记录写入到重做日志缓冲区(redo log buffer)

#8 提交事务的时候,redo log则会开启两阶段提交:首先是redo log buffer写入磁盘;写入binlog后;最后redo log commit完成redo log写入磁盘

#9 将binlog cache和临时文件里的内容写入binlog文件

#10 把本次更新binlog文件名以及位置写入redo log日志文件,然后写一个commit标记,标志事务最终完成

#11 MySQL 会在某个时候,将buffer pool中更新后的数据写入磁盘

注意:在提交的事务时候是否将redo log buffer写入文件或者操作系统页缓存由参数innodb_flush_log_at_trx_commit决定:

innodb_flush_log_at_trx_commit=0: 不会把redo log buffer数据写入磁盘

innodb_flush_log_at_trx_commit=1: 把redo log buffer数据写入磁盘,一般使用这个参数,不存在丢失数据,这种最安全

innodb_flush_log_at_trx_commit=2: 把redo log buffer数据先刷到操作系统页缓存(page cache),然后什么时候刷入磁盘由操作系统决定

另外,提交事务的时候将binlog写入文件还是操作系统由sync_binlog参数决定:

sync_binlog=0:会强制在提交事务的时候,把binlog写入操作系统页缓存,这种还是有可能丢失数据

sync_binlog=1:会强制在提交事务的时候,把binlog直接写入到磁盘文件里去

MySQL深度剖析之SQL语句更新流程(2021)相关推荐

  1. 详解MySQL的逻辑架构和SQL语句执行流程

    文章目录 1. 逻辑架构 1.1 连接层 1.2 服务层 1.3 引擎层 1.3.1 InnoDB 存储引擎 1.3.2 MyISAM 存储引擎 1.3.3 其他存储引擎 1.4 存储层 3. SQL ...

  2. MySQL数据库https接口_第三章 mysql 数据库接口程序以及SQL语句操作

    mysql  数据库接口程序以及SQL语句操作 用于管理数据库: 命令接口自带命令 DDL:数据定义语言(create drop ) DCL: 数据控制语言(grant revoke) DML: 数据 ...

  3. 【大话Mysql面试】-常见SQL语句书写

    [大话Mysql面试]-常见SQL语句书写 4.1 SQL语句主要分为哪几类? 数据定义语言DDL(Data Defination Language):主要为create drop alter等操作, ...

  4. 软件创新实验室:MySQL数据库与简单SQL语句使用

    文章目录 前言 简介 特点 SQL DDL:操作数据库.表 DML:增删改表中数据 DQL:查询表中的记录 后记 拓展 范式 第一范式 1NF 第二范式 2NF 第三范式 3NF B+树 节点结构 插 ...

  5. ​MYSQL中常用的SQL语句​(增删改查)

    MYSQL中常用的SQL语句 一.增删改查 1.新增 指定字段插入: INSERT INTO <表名> (<字段1>, <字段2>, <字段3>) VA ...

  6. Oracle SQL语句执行流程与顺序原理详解

    以前读的文章,保存到本地了,忘记来源了,分享一下,本地存着怕丢了 Oracle SQL语句执行流程与顺序原理详解 第一步:客户端把语句发给服务器端执行 当我们在客户端执行SQL语句时,客户端会把这条S ...

  7. 第二十三章 MySQL数据库 手册2 SQL语句

    第二十三章 MySQL数据库 手册2 SQL语句 实验二:用SQL语句,管理数据库 `危险命令,delete 后不加 where 条件代表删除所有数据 delete.` `更加危险的删除命令trunc ...

  8. Mysql增删改查|SQL语句(史上最全|实战教学)

    文章目录 关于数据库的操作 1.查看数据库 2.创建数据库 3.选择要操作的数据库 4.查看自己所处的位置及默认所在的位置 5.在命令行选择默认的数据库 6.删除数据库 关于表的操作 1. 查看库有哪 ...

  9. mysql 如何优化sql语句,如何优化SQL?MySQL中超实用的SQL语句送给大家

    如何优化SQL?MySQL中超实用的SQL语句送给大家 如何优化SQL?MySQL中超实用的SQL语句送给大家 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据 ...

最新文章

  1. http://forensics.idealtest.org CASIA图像篡改数据库
  2. 分布式架构探索 - 2. WebService RPC框架之Apache CXF
  3. 国家新一代人工智能开放创新平台将参加重庆智博会
  4. 在Java中实现过滤器和面包店锁
  5. leetcode面试题 17.15. 最长单词
  6. Django 博客教程(三):创建应用和编写数据库模型
  7. javafx做的天气预报小程序
  8. 暗影精灵3 黑苹果macOS BigSur 11.2.3 EFI
  9. 8.4 Power Management
  10. 只需简单一步,android自带的示例程序 BluetoothChat 变蓝牙串口助手
  11. CIS芯片测试到底怎么测?
  12. 2023秋招--梦加网络--游戏客户端--一面面经
  13. Mysql 学习教程
  14. 第三届大湾区杯B题思路及代码-基于宏观经济周期的大类资产配置策略构建
  15. 王灏:光音网络致力打造Wi-Fi大生态圈
  16. 详解:海盗分赃(25 分)
  17. Matlab软件有哪些版本,matlab软件功能简要介绍及版本描述
  18. VB虚拟机中ubuntu Linux系统安装使用MCNP5
  19. [Excel] 用sumproduct函数实现数据透视表功能
  20. Anaconda中conda命令或者pip命令使用豆瓣镜像下载包

热门文章

  1. verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结
  2. tp5 database.php,Tp5项目修改数据库
  3. c#实现http文件下载
  4. python soup findall_BeautifulSoup库findAll()、find()方法详解
  5. gm220s路由器怎么设置_巴法诺无线路由器连接打印机怎么设置【图文教程】
  6. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
  7. 分治法的关键特征_经典算法思想2——分治(Divide-and-Conquer)
  8. Feign 超时设置
  9. Java 算法 素数对猜想
  10. 9月11号华为发布鸿蒙2.0和EMUI 11,来看看鸿蒙最牛逼的地方