MySQL InnoDB update流程

来源:这里教程网 时间:2026-03-01 15:32:29 作者:
以update test set idx = 2 where id=10;为例
1. server层,语法解析,解析成mysql认识的语法,查询什么表,什么字段,生成查询路径树,选择最优查询路径
2. InnoDB存储引擎,判断id=10这行对应的页是否在缓存池里,如果不在,则将对应的页从datafile中读到InnoDB缓冲池中,并对相关记录加独占锁
3. undo tablespace回滚段  ,idx修改之前的值和对应的主键、事务id原来的信息写入undo tablespace回滚段
4. 更新缓存页中数据,并将更新记录和生成的LSN值(日志子序列号) 写入log buffer。更新之后缓冲池里的页就是脏页了。
5.    提交事务时,根据innodb_flush_log_at_trx_commit设置,用不同方式将log buffer中的更新记录刷新到redo log中
然后写binlog ,写完之后后开始binlog的commit,同步到磁盘
binlog同步后把binlog文件和postition(binlog文件内的位置)写到redo log 中,然后在redo log写入一个commit标志,然后就完成了这个事务的提交。接下来释放独占锁
6.后台i/o线程将缓存中合适的脏页刷新到磁盘数据文件中,如果开启双写缓存功能,需要先拷贝一份脏页到双写缓冲区,等其中的数据落盘,再从缓冲池把脏页刷新到各个数据文件中。

相关推荐