最近在学习MySQL架构的时候,关于执行器,存储引擎的具体操作那里,有些地方不是很懂,我仔细思考了一下,发现我对两阶段提交这个过程比较模糊,所以我特意写一篇文章来说一下两阶段提交。
比如说一条更新语句,执行器执行完更新操作后,存储引擎会将这条更新后的语句放到buffer pool中,然后两阶段提交就开始了:存储引擎将更新的记录放到redolog里,redolog处于prepare状态;接着执行器会将这个操作的binlog放到磁盘中;redolog处于commit状态。至此,两阶段提交完成,一条数据的更新操作也完成了。
可能我讲的有点不太好懂,我找了一张图帮助理解(浅色框表示在InnoDB中执行,深色框表示在执行器中执行)
为什么需要两阶段提交呢?目的是保持redolog和binlog的状态一致,即一条redolog物理日志对应一条binlog逻辑日志。
最后来说一下redolog和binlog的区别。
redolog是InnoDB存储引擎特有的,记录的是物理日志,写满后会刷新脏页。
binlog在server层中,是所有引擎共享的,记录的是逻辑日志,写满后可以追加写。
这块关于redolog和binlog的比较不算难,但是关于两阶段提交有点难,难就难在要想明白为什么需要两阶段提交。