MySQL之Redo日志刷盘策略超详细解析

Redo Log的写入并不是直接写入磁盘,Innodb引擎会在写入Redo Log的时候先写入Redo log buffer,之后以一定的频率刷入到真正的redo log file中。这里的一定频率就是接下来的刷盘策略
在这里插入图片描述

那redo log buffer刷盘到redo log file的过程也不是真正的去刷入磁盘,它只是刷入到文件系统缓存(page
cache)中(现代操作系统为了提高文件写入效做的一个优化),真正的写入会交给操作系统自己来决定(比如Page Cache)足够大了。针对这种情况,Innodb给出了Innodb_flush_log_at_trx_commit参数

这个参数有三种策略
设置为1:每次提交事务都将进行同步,刷盘操作(默认)
设置为0:每次事务提交不进行刷盘操作(系统默认master thread每隔1s进行一次重做日志的同步)
设置为2:表示每次事务提交时都只把redo log buffer内容写入page cache,不进行同步,由文件系统(os)自己决定什么时候同步到磁盘。

另外,innodb存储引擎有一个后台线程,每隔1秒,就会把redo log buffer中的内容写到文件系统缓存(page cache),然后调用刷盘操作。

图解Innodb_flush_log_at_trx_commit=1
在这里插入图片描述

  • 只要更新数据,RedoLogBuffer就在实时做记录,跟Innodb_flush_log_at_trx_commit没有关系,Innodb_flush_log_at_trx_commit这个影响的是在提交事务的时候起作用,设置为1的话就是一提交就写入Page Cache,做刷盘。

图解Innodb_flush_log_at_trx_commit=2
在这里插入图片描述

  • 当提交事务的时候,去看Innodb_flush_log_at_trx_commit这个值为2,马上就会把redo log buffer中的数据更新到page cache中,但是刷盘的时间由操作系统决定

  • 图解Innodb_flush_log_at_trx_commit=0
    在这里插入图片描述

    • 当提交事务的时候,如果参数为0,那么就直接不管了,交给后台线程去刷盘。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值