innodb 存储引擎架构设计

在这里插入图片描述
以更新数据为例:update user set username = ‘zhangsan’ where id= ‘1’

  1. innodb cache: inonbb数据缓存。首先会判断上面这条语句的数据是否在在缓存中,如果不在,则从磁盘数据里面加载过来,然后加独占锁,避免其他线程在此期间更新。
  2. 将旧的数据刷入undo log 日志文件,方便出错后回滚数据。
  3. 更新新的数据到innodb cache中。这里讲username = ‘zhangsan’ 这个新的数据更新到cache中。此时,磁盘数据还是旧的。
  4. redo log cache 也就是redo log buffer, 将更新数据写入redo log buffer缓冲池中。
  5. 如果此时系统宕机,那redo log buffer中的数据也会丢失,更新是没有成功的
  6. 提交事务后redo log开始刷入磁盘的redo log日志文件。如果刷入了redo log文件,就算系统宕机,重启后数据也不会丢失,会从redo log重新刷新数据。
mysql> show variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.01 sec)

redo log 从buffer刷入磁盘的过程中,有innodb_flush_log_at_trx_commit参数可以设置。

  • innodb_flush_log_at_trx_commit = 0时, redo log始终存在于buffer中,不会刷入磁盘redo log日志文件,系统宕机后,数据会丢失。性能最好
  • innodb_flush_log_at_trx_commit = 1。只要事务提交成功,必然会刷redo log到磁盘文件。数据保证不丢失,性能会相对差一点。这也是innodb 默认的刷redo log日志配置
  • innodb_flush_log_at_trx_commit = 2 。redo log会先刷入系统缓存os cache中。 os cache会不定时的刷新到磁盘文件,性能比等于1时要好,但是系统宕机仍有可能丢失数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值