一条SQL语句的执行过程

本文最后更新于 1 分钟前,文中所描述的信息可能已发生改变。

日志

  • undo log: 逻辑日志(相当于堕胎,撤回了没完全撤回)。用于事务的回滚,保证事务的 ACID 特性;MVCC(多版本并发控制)实现非锁定读。
  • redo log: 物理日志。
  • binlog: 二进制日志。

两阶段提交

两阶段提交是指在分布式事务中,为了保证所有节点的数据一致性,引入的一种协议。两阶段提交的过程分为两个阶段:

  • 第一阶段:准备阶段,协调者询问所有参与者是否可以提交事务,如果所有参与者都可以提交事务,则进入第二阶段,否则回滚事务。
  • 第二阶段:提交阶段,协调者通知所有参与者提交事务。

两阶段提交的缺点:阻塞时间长,单点问题。

三阶段提交

引入超时机制,解决了阻塞时间长的问题。三阶段提交的过程分为三个阶段:

  • 第一阶段:准备阶段,协调者询问所有参与者是否可以提交事务,如果所有参与者都可以提交事务,则进入第二阶段,否则回滚事务。
  • 第二阶段:提交阶段,协调者通知所有参与者提交事务。
  • 第三阶段:完成阶段,协调者通知所有参与者提交事务。

逻辑日志和物理日志

  • 逻辑日志:可以简单理解为记录的就是 sql 语句。
  • 物理日志:因为 MySQL 数据最终是保存在数据页中的,物理日志记录的就是数据页变更。

参考

Wannier90.win 文件设置
Singleton