赞
踩
Innodb_log_buffer_size 定义InnoDB用于写入磁盘上的日志文件的缓冲区的大小(以字节为单位) 。默认大小为16MB。较大的日志缓冲区使大型事务可以运行,而无需在事务提交之前将日志写入磁盘。
1)系统变量参数
innodb_log_files_in_group
日志文件中日志组。 InnoDB以循环方式写入文件。默认值(推荐值)为2,也就是两个ib_logfile文件。
innodb_log_file_size
日志组中每个日志文件的字节大小。日志文件的组合大小((innodb_log_file_size * innodb_log_files_in_group) )不能超过略小于512GB的最大值。通常,日志文件的组合大小应该足够大,以便服务器能够消除工作负载活动的高峰和低谷,这通常意味着有足够的重做日志空间来处理一个多小时的写活动。值越大,缓冲池中所需的检查点刷新活动就越少,从而节省磁盘I/O。日志文件越大,崩溃恢复速度也越慢。在MySQL 5.7.11中,(innodb_log_file_size 的最小值从1MB增加到4MB。
innodb_flush_log_at_trx_commit
控制如何将日志缓冲区的内容写入磁盘并刷新到磁盘。
innodb_flush_log_at_timeout
控制日志刷新频率
1)运行状态变量
1、Innodb_log_file_size 一般设置128M,实际不够可根据如下规则调整。
# 具体依据如下:我经常设置为 64-512MB # 一般来说,日志文件的全部大小,应该足够容纳服务器一个小时的活动内容。 # 首先在业务高峰期,计算出1分钟写入的redo量,然后评估出一个小时的redo量 mysql> pager grep Log #使用page之后,执行的命令只显示 Log 开头的 PAGER set to 'grep Log' mysql> show engine innodb status\G select sleep(60); show engine innodb status\G; select UserID , IMEI , regtime,LoginName,PlatID,PlatType,Mobile from register_info where LoginName = '931011910@365you' Log sequence number 12701144821588 Log flushed up to 12701144603368 1 row in set (0.08 sec) 1 row in set (1 min 0.00 sec) Log sequence number 12701162651514 Log flushed up to 12701162471514 1 row in set (0.00 sec) mysql> select (12701162651514-12701144821588)/1024/1024 as MB; +-------------+ | MB | +-------------+ | 17.00394249 | +-------------+ 1 row in set (0.00 sec)
Log sequence number,这是写入事务日志的总字节数。所以,现在你可以看到每分钟有多少MB日志写入,通过计算后得到每分钟有17M的日志写入。根据经验法则。通常我们设置redo log size足够大,能够容纳1个小时的日志写入量。
1小时日志写入量=17M * 60=1 020M,由于默认有两个日志重做日志文件ib_logfile0和ib_logfile1。在日志组中的每个重做日志文件的大小一致,并以循环的方式写入。innodb存储引擎先写重做日志文件0,当达到文件的最后时,会切换到重做日志1,并checkpoint。以此循环。
所以我们可以大约设置innodb_log_file_size=512M。注意:在innodb1.2.x版本之前,重做日志文件总的大小不得大于等于4G,而1.2.x版本将该限制扩大到了521G。
总结:
Reference
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。