0
点赞
收藏
分享

微信扫一扫

Mysql面试篇(三)查询语句执行流程&undo log 与 redo log

苦茶如歌 2022-04-30 阅读 58

5. 查询语句执行流程

执行 SQL 语句 select * from user where id = 1 时发生了什么

 

6. undo log 与 redo log

undo log

  • 回滚数据,以行为单位,记录数据每次的变更,一行记录有多个版本并存

  • 多版本并发控制,即快照读(也称为一致性读),让查询操作可以去访问历史版本

 

◽️每个事务会按照开始时间,分配一个单调递增的事务编号 trx id

◽️每次事务的改动都会以行为单位记入回滚日志,包括当时的事务编号,改动的值等

◽️查询操作,事务编号大于自己的数据是不可见的,事务编号小于等于自己的数据才是可见的

        ▫️例如图中红色事务看不到 trx id=102 以及 trx id=101 的数据,只有 trx id=99 的数据对它可见

redo log

redo log 的作用主要是实现 ACID 中的持久性,保证提交的数据不丢失

◽️它记录了事务提交的变更操作,服务器意外宕机重启时,利用 redo log 进行回放,重新执行已提交的变更操作

◽️事务提交时,首先将变更写入 redo log,事务就视为成功。至于数据页(表、索引)上的变更,可以放在后面慢慢做

  • 数据页上的变更宕机丢失也没事,因为 redo log 里已经记录了
  • 数据页在磁盘上位置随机,写入速度慢,redo log 的写入是顺序的速度快

它由两部分组成,内存中的 redo log buffer,磁盘上的 redo log file

◽️redo log file 由一组文件组成,当写满了会循环覆盖较旧的日志,这意味着不能无限依赖 redo log,更早的数据恢复需要 binlog

◽️buffer 和 file 两部分组成意味着,写入了文件才真正安全,同步策略由参数 innodb_flush_log_at_trx_commit 控制

举报

相关推荐

0 条评论