前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第32问:innodb_log_buffer_size 到底有什么作用?

第32问:innodb_log_buffer_size 到底有什么作用?

作者头像
爱可生开源社区
发布2021-03-16 10:39:56
1.3K0
发布2021-03-16 10:39:56
举报
文章被收录于专栏:爱可生开源社区

问题:

MySQL 官方文档说 innodb_log_buffer_size 是 redo log 的写缓存,设置大一点能减少写操作。

我们用实验来学习一下这个参数的作用。

实验:

宽油起个数据库:

先将 innodb_log_buffer_size 设置为最小值。

接下来,我们先建一个有数据的表,建表的方法参考实验 11

重复执行最后一句 insert,直到表中有 65536 行数据:

接下来我们复制一张表,因为我们要做两次实验:

接下来我们开启 innodb metrics 和 performance_schema:

执行一次 insert,计算一下 LSN 的差值,也就是这个事务产生了多少 redo log:

可以看到这个事务大概产生了 3M 左右的 redo log。

再看一下这个过程发生了多少 IO:

可以看到发生了 7 次 IO,6 次 write 和 1 次 sync,每次 write 大概需要 0.8ms。

现在我们变更一下 my.cnf,将 innodb_log_buffer_size 变更为默认值 16777216,重启数据库。此处省略步骤, 只看结果:

由于重启了一次数据库,记得再开启一次 innodb metrics 和 performance_schema:

再执行一次 insert,计算一下 LSN 的差值, 不过这次用的是 t2 表:

也产生了 3M 左右的 redo log。

再来看看 IO:

这次只发生了 2 次 IO,一次 write 和一次 sync。

结论:

对比一下两次 IO 的结果,可以看到:

  • innodb_log_buffer_size 是 redo log 的写缓存,如果 buffer 不够大,就会发生多次 IO write,将缓存中的数据刷到磁盘;
  • innodb_log_buffer_size 越大,IO 次数越少。

在我的虚拟机环境的一般存储上,虽然 IO write 次数少了,但 write 的数据量是差不多的,所以整体的 IO 延迟总体差不多;在好点的存储上,如果数据量差不多, write 次数越少,延迟会越低。

这也就是为什么大家在调整这个参数后, 经常会感知不到性能的提升。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:
  • 实验:
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档