21.redo log刷盘策略


highlight: arduino-light

redo log 刷盘步骤

log_buff(内存) ---> os cache --->OS刷新 (flush)---> disk

redo log 刷盘策略

InnoDB提供了几种刷盘策略,此时这个策略是通过这个参数innodbflushlogattrx_commit来配置的.

innodbflushlogattrx_commit=0

表示每隔一秒把redo log buffer刷到磁盘文件系统中(os cache)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。 也就是说一秒之前的日志都保存在内存缓冲区,此时如果mysql机器宕掉,最极端的情况是可能丢失1秒的数据变更。

image.png

innodbflushlogattrx_commit=1

表示在每次事务提交的时候,都会把redo log buffer刷到磁盘文件系统中(os cache)去,并立刻调用文件系统的“flush”操作将缓存刷新到磁盘上去。

这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash或者是主机断电都不会丢失任何已经提交的数据。

但是这样的话,数据库对磁盘IO的要求就非常高了,如果底层的硬件比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升,会大大降低mysql的性能。

image.png

innodbflushlogattrx_commit=2

表示在每次事务提交的时候会把redo log buffer刷到磁盘文件系统中(os cache)去,但并不会立即刷写到磁盘,每隔1s 将os cache中的数据刷新到磁盘。

如果只是MySQL数据库挂掉了(MySQL Crash),由于文件系统没有问题,那么对应的事务数据并没有丢失。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,数据库的事务数据可能丢失1秒之类的事务数据。

这样的好处,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高了。(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存(os cache)中,对底层IO没有压力)。

image.png

redo log刷盘策略总结

0:延迟写。效率最高,最不安全:log_buff —> 每隔1秒 —> os cache —>实时---—> disk

1:实时写,实时刷。效率最低,最安全:log_buff —> 实时 —> os cache —>实时---—> disk

2:实时写,延迟刷。效率折中,安全折中:log_buff —> 实时 —> os cache —>每隔1秒—> disk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值