说明
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大小的值,那么可能是当时正在插入大量数据的。
要注意的是:恢复时间不仅取决于日志文件的大小,还取决了日志文件中的条目数。如果条目数少,但是每个条目都是很大的,那么恢复速度也是很块的。
最后一点注意: 太大的缓冲池或非常不正常的业务负载可能会计算出非常大(或非常小)的日志大小。这也是公式不足之处,需要根据判断和经验。但这个计算方法是一个很好的参考标准。
版权声明:本文为博主原创文章,未经博主允许不得转载。
innodb_log_file_size