SQL更新语句是怎样执行的(redo log日志和binlog日志)

本文以一个简单的SQL更新语句为例,详细解析其执行流程,涉及连接器、分析器、优化器和执行器的作用。重点介绍了InnoDB引擎的redo log(重做日志)和binlog(归档日志),解释了它们在数据库崩溃恢复和主从同步中的作用,以及两阶段提交确保日志一致性的重要性。
摘要由CSDN通过智能技术生成

  要说清楚SQL更新语句是怎样执行的, 我们用一条最简单的SQL语句来做下示例:
  update user set age = age + 1 where id = 3;
  其实更新语句的执行和查询语句的执行流程相似,但是更复杂一些.首先,也是通过连接器进行连接,然后将user表的查询缓存都失效,接下来,分析器会通过词法和语法分析知道这是一条更新语句,优化器来选择id这个索引,然后执行器负责找到这一行,并更新,这个过程非常复杂,要说清这个过程,我们首先要理解什么是
redo log(重做日志)和binlog(归档日志).
redo log 日志模块:
  redo log是InnoDB引擎特有的日志,在写库的时候,如果每次我们都是在磁盘上找到对应的位置,然后去操作,那么整个过程的IO成本,查找成本都很高,为了解决这个问题,InnoDB引擎添加了一个Write-Ahead Logging的操作(简称WAL),它的关键点是先写日志,等空闲的时候再写磁盘.具体来说,就是当有一条记录需要更新的时候,InnoDB引擎会把记录写到redo log里面,并更新内存,InnoDB引擎会在空闲的时候,将这个操作记录更新到磁盘里面,如果写库操作特别多的话,redo log有写满的风险,这个时候InnoDB引擎就会先把一部分redo log写入到磁盘,腾出空间来.有了redo log,InnoDB就可以保证数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe.
binlog 日志模块:
  binlog日志是Server层日志,所有存储引擎都可以使用,binlog日志记录的是执行的sql语句,而redo log是物理日志,记录的是在磁盘的某个位置为了什么修改;再有就是binlog日志可以追加写,一个文件写满了就切换到下一个文件,而redo log日志有固定的空间,如果快用完了,那么InnoDB引擎就会先把一部分redo log写入到磁盘,腾出空间来.
接着看执行器和InnoDB引擎执行简单的upda

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值