• MySQL实战02の一条更新语句怎么执行的


    更新语句执行过程大致与查询过程相似

    WAL技术,write-ahead logging,先写日志再写磁盘
    
    binlog(归档日志)
    Server层自己的日志,Binlog有两种模式,statement 格式是记sql语句, row格式会记录行的内容,记两条,更新前和更新后都有。
    
    redo log(重做日志)
    InnoDB引擎特有的日志,拥有crash-safe能力(即使数据库发生异常重启,之前提交的记录也不会丢失)。
    两阶段提交:保证两份日志之间的逻辑一致(反证法)
    1. 引擎将行数据更新到内存,同时将更新操作记录到redo log中,此时redo log处于prepare状态。然后告知执行器执行完了,随时可以提交事务。
    2. 执行器生成这个操作的binlog,写入磁盘
    3. 执行器调用引擎的提交事务接口,引擎把redo log改成提交状态commit,更新完成。
    不同点
    1. redo log是InnoDB特有的;binlog是Server层实现的,所有引擎可以用。
    2. redo log是物理日志,记录“在某个数据页做了什么修改”;binlog是逻辑日志,记录语句的原始逻辑。
    3. redo log是循环覆盖写的,空间固定会用完;binlog是追加写,写完一个切换写下一个,不会覆盖以前的日志。

    原文出处:https://time.geekbang.org/column/article/68633

    总结:

    理解两种日志的不同点和用途,两阶段提交

  • 相关阅读:
    ASP.NET学习笔记(1)
    vs2005新建项目中没有ASP.NET WEB应用程序
    IE无法安装Activex控件
    【Android】SDK工具学习
    【英语】Bingo口语笔记(22)
    【Python】实践笔记
    【学习】纪录片笔记
    【英语】Bingo口语笔记(20)
    【英文】20141027 生词
    【英文】Bingo口语笔记(18)
  • 原文地址:https://www.cnblogs.com/yangjiming/p/10314392.html
Copyright © 2020-2023  润新知