加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-06-16 22:14:20 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍MySQL中InnoDB存储引擎架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! InnoDB组件结构: buffer pool : 缓冲池,缓存磁盘的数据 redo log buffer :记录对缓冲池的操作,根据策略写入磁盘防止宕机
  这篇文章主要介绍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 修改过的数据都会丢失,也并不影响数据前后的一致性。如果事务提交失败,那数据库的数据更加不会改变。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!