ITPub博客

首页 > 数据库 > MySQL > MySQL InnoDB update流程

MySQL InnoDB update流程

原创 MySQL 作者:T1YSL 时间:2020-12-22 11:24:22 0 删除 编辑

以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线程将缓存中合适的脏页刷新到磁盘数据文件中,如果开启双写缓存功能,需要先拷贝一份脏页到双写缓冲区,等其中的数据落盘,再从缓冲池把脏页刷新到各个数据文件中。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-2744277/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE SQL执行计划
请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160798