SQL更新语句的执行流程

本文详细介绍了MySQL中执行SQL更新语句的流程,涉及InnoDB的redo log和binlog。redo log通过WAL技术确保crash-safe,其刷脏页策略包括日志写满、系统内存不足或空闲时。binlog则是MySQL server层的日志,用于数据恢复和事务一致性。两阶段提交确保了redo log和binlog的一致性。
摘要由CSDN通过智能技术生成

连接器-->分析器-->优化器-->执行器

更新流程还涉及两个重要的日志模块:redo log(重做日志)、binlog(归档日志)

redo log(InnoDB 特有的日志)

WAL技术:Write-Ahead Logging,先写日志,再写磁盘。即:当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里更新内存,这个时候更新就算完成了。InnoDB引擎会在适当的时候(e.g.系统比较空闲的时候),将这个操作记录更新到磁盘里面(刷脏页)。

优点:保证即使数据库发生异常重启,之前提交的记录都不会丢失,即crash-safe。

平时执行很快的更新操作,其实就是在写内存和日志,刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。MySQL偶尔“变慢”一下的那个瞬间,可能就是在刷脏页(flush)。

Q:什么时候将内存里的数据写入磁盘(flush)?

  1. InnoDB的redo log写满了。这时候系统会停止所有更新操作,把checkpoint往前推进,redo log留出空间可以继续写。
  2. 系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。如果淘汰的是“脏页”(内存数据页跟磁盘数据页内容不一致),就要先将脏页写到磁盘。
  3. MySQL认为系统“空闲”的时候。
  4. MySQL正常关闭的情况。这时候,MySQL会把内存的脏页都flush到磁盘上,这样下次MySQL启
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值