0
点赞
收藏
分享

微信扫一扫

MySQL:如何计算一个合适的 InnoDB Log大小


说明

InnoDB log大小对于InnoDB性能影响很大,而太大、太小都会造成不小的影响。太大:会拉长实例恢复时间,还可能会造成更多数据的丢失。太小:造成日志切换太频率,造成写入I/O压力。
下面介绍一下如何根据自己的环境计算一个合适的日志大小。

步骤

是通过​​show engine innodb status​​命令中Log sequence number前后的差值来大概确认该段时间内产生的日志大小,下面通过计算1分钟产生的日志量来推算1小时产生的日志大小。

root@localhost 15:42:06 >pager grep sequence    --只显示 Log sequence number
PAGER set to 'grep sequence'
root@localhost 15:51:42 >show engine innodb status\G select sleep(60); show engine innodb status\G
Log sequence number 20312242784 ---前值
1 row in set (0.00 sec)

1 row in set (1 min 0.00 sec)

Log sequence number 20312460608 --1分钟后值
1 row in set (0.01 sec)

1分钟日志大小 = 20312460608 - 20312242784 =217824 byte = 0.2077 Mb

也就是一分钟时间产生了 0.2077 Mb 日志,那么推算一小时的日常量 = 0.2077 Mb * 60 =12.464Mb。

而日志的切换频率20 - 30分钟一次最好,那么单个日志文件大小 = 12.464Mb/2/日志文件个数 = 3.116Mb,也就是一个日志文件大小为3.116Mb。
即:​​​innodb_log_file_size=3.116 M​

当然了,我这是测试环境,数据量非常小。

建议在业务高分期做计算、或者采集一个比较长时间的日常量,计算的结果会更加准确。

总结

经过计算你可能会得到比当前日志大小小的多的值,这是正常情况。如果你计算得到了一个GB大小的值,那么可能是当时正在插入大量数据的。

要注意的是:恢复时间不仅取决于日志文件的大小,还取决了日志文件中的条目数。如果条目数少,但是每个条目都是很大的,那么恢复速度也是很块的。

**最后一点注意: **太大的缓冲池或非常不正常的业务负载可能会计算出非常大(或非常小)的日志大小。这也是公式不足之处,需要根据判断和经验。但这个计算方法是一个很好的参考标准。


举报

相关推荐

0 条评论