MySQL~Redo刷盘策略、LogBuffer缓存池和LogFile日志文件理解

刷盘策略
  • Innodb在写Redo日志的时候,是先写入redo log buffer 中,然后再按照一定频率刷新到redo log file中。
  • 这里的 一定频率 有多个选择,这些选择对应的就是不同的刷盘策略.

这里的刷盘不是指将内存中的数据刷新到磁盘,而是指从Redo日志位于内存中的缓冲区(redo log buffer)刷新到位于磁盘中的文件区(redo log file).

  • redo log buffer 刷盘到redo log file的过程也不是真正刷到磁盘中去,只是刷入到 文件缓存系统(page cache)中去。真正的刷入磁盘会交给操作系统来决定

关键参数
数据库中innodb_flush_log_at_trx_commit参数就控制了在事务提交时,如何将buffer中的日志数据刷新到file中.

该参数支持三种策略:

  • 参数值为0:提交事务也不进行刷盘操作
  • 参数值为1:提交事务一次就刷盘一次默认刷盘策略
  • 参数值为2:每次提交事务时,只会将buffer中的内容写入页面缓存中,不会在将页面缓存中的数据刷盘到file中

查看默认的刷盘参数值:

mysql> show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set, 1 warning (0.03 sec)

可以看到参数值为1,即默认提交一次就刷盘一次

这里必须提到的一个情况是,即使我们将参数设为0,什么也不做,在数据库中也有一个后台线程,默认每1秒就帮我们自动刷盘一次:
在这里插入图片描述
没有提交的事务在执行过程中写下的redo log记录,也可能会被后台线程刷盘,如下图:
在这里插入图片描述
除了后台线程自动刷盘外,还有一种情况也会刷盘,就是当buffer中的记录数据大小达到最大值(16M)的一半的时候,也会自动刷盘。

总结:

  • 事务提交时会刷盘
  • 后台线程每隔1秒自动刷盘
  • 记录达到buffer空间一半时刷盘
不同刷盘策略演示

参数值为1时,提交一次刷盘一次

在这里插入图片描述
参数为2时,将buffer中的数据刷新到page cache中间缓存中,不会进一步更新到file中
在这里插入图片描述
我们分别对参数为1和参数为2时进行操作,看相同操作下哪个用掉的时间更短。
参数1演示


创建数据库
CREATE DATABASE atguigudb3;

使用数据库
USE atguigudb3;

创建test_load
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值