日志系统:一条SQL更新语句是如何执行的?

##日志系统:一条SQL更新语句是如何执行的?
###1.update T set c=c+1 where ID=2;的执行过程
  建立连接进行权限验证然后进入由于是更新语句就会使该表中的查询缓存失效,之后分析器进行词法分析以及语法更新,优化器进行索引的选择之后直接通过执行器进行执行并调用存储引擎的接口最后更新成功。更新的流程涉及到了两个重要的日志模块(redo log重做日志,binlog归档日志),
###2.redo log(重做日志)
  1.在MySQL里存在一个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录进行更新操作,整个过程的IO成本,查找成本都很高,为了解决这个问题mysql使用WAL(Write-Ahead Logging)技术,它的关键点就是先写日志,再写磁盘。
  2.具体的例子是:当有一条记录需要更新的时候,InnoDB引擎就会把记录写在redo log中,并更新内存,这个时候更新就算完成了,同时InnoDB引擎会在适当的时候将记录更新到磁盘中去,但是一般是在系统比较空闲的时候进行的。
  3.InnoDB中的redo log是固定的大小,比如可以配置为一组4个文件,每个文件的大小都是1GB,那么总共可以记录4GB的操作,具体如下图所示。
          avatar
  3.有了redo log之后,InnoDB就可以保证数据库异常重启之后数据不会丢失,这个能力称之为crash-safe。
待更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值