首页 > 数据库 > MySQL > 正文

MySQL中InnoDB存储引擎架构的示例剖析

2024-07-24 12:33:40
字体:
来源:转载
供稿:网友
  这篇文章主要介绍MySQL中InnoDB存储引擎架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
 
  InnoDB组件结构:
 
  buffer pool : 缓冲池,缓存磁盘的数据
  redo log buffer :记录对缓冲池的操作,根据策略写入磁盘防止宕机但事务已经提交而丢失数据
  undo log :当对缓冲池的数据进行修改时,在事务未提交的时候都可以进行回滚,将旧值写入 undo 日志文件便于回滚,此时缓冲池的数据与磁盘中的不一致,是脏数据
  1. Buffer Pool
  假设现在有一条更新语句:
 
  update users set name = 'lisi' where id = 1
  需要更新到数据库,InnoDB会执行哪些操作呢?

  2. undo 日志文件
  假设 id = 1 这条数据name原来的值 name = 'zhangsan',现在我们要更新为 name = 'lisi' , 那么我们就需要把旧值name='zhangsan'和id=1这些信息写入到undo日志文件中。
 
  3. 更新buffer pool 数据
  在undo日志文件写入完毕之后,便开始更新内存中的这条数据。把 id = 1 的 name = 'zhangsan' 更新为 name = 'lisi'。这时内存中的数据已经更新完毕,但磁盘上的还没有变化,此时出现了不一致的脏数据。
 
  4. redo log buffer
  在InnoDB结构中,有一个 redo log buffer 缓冲区存放redo日志,所谓redo日志,例如 把id=1,name='zhangsan'修改为name='lisi' 便是一条日志。
 
  5. 事务没提交,数据库宕机后有影响吗?
  其实并没有影响,事务没有提交,意味着执行没有成功,就算MySQL崩溃或者宕机后,内存中的 buffer pool 和 redo log buffer 修改过的数据都会丢失,也并不影响数据前后的一致性。如果事务提交失败,那数据库的数据更加不会改变。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表