mysql事务的执行过程_mysql事务执行过程分析

以下为个人总结,如有问题,欢迎提出

sql:update test set name = 'test' where id=2;

事务完整流程:

1.事务开始

2.申请锁资源,对id=2这行数据上排他锁

3.将需要修改的data pages读取到innodb_buffer_cache

4.记录id=2的数据到undo log

5.记录id=2修改后的数据到redo log buffer

6.将buffer cache中id=2得name改为test

7.commit,触发二阶段提交2pc

8.事务结束

知识点科普:

WAL:write ahead logging

针对数据文件的修改,必须遵循日志先行原则。也即是将数据持久化到磁盘之前必须确保redo log落盘。

二阶段提交(2pc two phase commit):

二阶段提交,首先redo log prepare,然后写入binlog,最后redo log commit。主要是保证redo log事务写入顺序和binlog 事务顺序一致(通过事务id保证一致)。

完整流程如下:

prepare阶段:redo持久化到磁盘(redo group commit),并将回滚段置为prepared状态,此时binlog不做操作

commit阶段:innodb释放锁,释放回滚段,设置undo log提交状态,binlog持久化到磁盘,然后存储引擎层提交

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值