mysql 参数调优(2)之设置重做日志文件的大小 innodb_log_file_size

mysql 参数调优(2)之设置重做日志文件的大小 innodb_log_file_size,第1张

我们知道redo log包括 buffer和log file的部分,这里的innodb_log_file_size是配置log file的大小的。

innodb_log_file_size这个选项是设置 redo 日志(重做日志)的大小。这个值的默认为5M,是远远不够的,在安装完mysql时需要尽快的修改这个值。如果对 Innodb 数据表有大量的写入 *** 作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复。

由于事务日志相当于一个写缓冲,而小日志文件会很快的被写满,这时候就需要频繁地刷新到硬盘,速度就慢了。如果产生大量的写 *** 作,MySQL可能就不能足够快地刷新数据,那么写性能将会降低。

大的日志文件,另一方面,在刷新 *** 作发生之前给你足够的空间来使用。反过来允许InnoDB填充更多的页面。对于崩溃恢复 – 大的重做日志意味着在服务器启动前更多的数据需要读取,更多的更改需要重做,这就是为什么崩溃恢复慢了。

如果不配的后果:默认是5M,这是肯定不够的。

最后,让我们来谈谈如何找出重做日志的正确大小。

幸运的是,你不需要费力算出正确的大小,这里有一个经验法则:在服务器繁忙期间,检查重做日志的总大小是否够写入1-2小时。你如何知道InnoDB写入多少,使用下面方法可以统计60秒内地增量数据大小:

mysql>show engine innodb status\G select sleep(60)show engine innodb status\G

Log sequence number 4631632062

...

Log sequence number 4803805448

mysql>select (4803805448-4631632062) 60/1024/1024

+--------------------------------------+

| (4803805448-4631632062) 60/1024/1024 |

+--------------------------------------+

|9851.84017181 |

+--------------------------------------+

1 row in set (0.00 sec)

在这个60s的采样情况下,InnoDB每小时写入9.8GB数据。所以如果innodb_log_files_in_group没有更改(默认是2,是InnoDB重复日志的最小数字),然后设置innodb_log_file_size为10G,那么你实际上两个日志文件加起来有20GB,够你写两小时数据了。

更改innodb_log_file_size的难易程度和能设置多大取决于你现在使用的MySQL版本。特别地,如果你使用的是5.6之前的版本,你不能仅仅的更改变量,期望服务器会自动重启。

好了,下面是步骤:

1、在my.cnf更改innodb_log_file_size

2、停止mysql服务器

3、删除旧的日志,通过执行命令rm -f /var/lib/mysql/ib_logfile*

4、启动mysql服务器 – 应该需要比之前长点的时间,因为需要创建新的事务日志。最后,需要注意的是,有些mysql版本(比如5.6.2)限制了重做日志大小为4GB。所以在你设置innodb_log_file_size为2G或者更多时,请先检查一下MySQL的版本这方面的限制。

[/warning]

innodb_log_buffer_size

该变量将数据存导入到内存中,确保有足够大的日志缓冲区来保存脏数据在被写入到日志文件之前init.d/mysqld

stop

[warning]一定要正常的关闭,否则会造成数据丢失或mysql服务启动失败。默认设置为5m,要扩大,来监控是否出错。

innodb_log_file_size设置大小通常视innodb_buffer_pool_size而定。影响日志文件性能的变量是innodb_log_buffer_size。在说明如何添加和调整innodb

log文件之前,先来看看与日志有关的参数warning]2。

innodb_log_files_in_group

该变量控制日志文件数,以防不测便于回退

view

source

print?

#

mv

ib_logfile*

/backup/,事务数据存储在innodb的redo日志文件里。

[warning]innodb_log_files_in_group是静态的变量,需要以“干净”的方式更改并重新启动,否则mysql启动不起来,建议分离innodb_data_home_dir和innodb_log_group_home_dir到单独的物理存储阵列上,难以满足生产环境下的需求。日志文件在mysql实例第一次启动时初始化,该文件是旋转的,因此可以根据文件修改时间来判断日志文件的旋转频率warning]

添加和调整innodb

log文件步骤。

innodb_log_group_home_dir

在事务被提交并写入到表空间磁盘文件上之前,注意查看mysql错误日志。日志是以顺序的方式写入,说明日志文件太小了。当我们调整innodb_buffer_pool_size大小时etc/。这些日志位于innodb_log_group_home_dir变量定义的目录中.

停止mysql服务

view

source

print?

#

/mysql_data

3,可以减少大量的io资源消耗

4,通常我们把这个目录设置与innodb_data_home_dir变量相同。为了获得最佳性能:

1.

根据innodb_log_group_home_dir变量进入到日志目录下

view

source

print?

#

cd

/data/,恢复数据需要很久,造成大量的停机时间。官方文档的建议设置是innodb_buffer_pool_size/innodb_log_files_in_group。

[warning]innodb_log_file_size是静态的变量,需要以“干净”的方式更改并重新启动,否则mysql启动不起来。默认值为2,这样可以保证io资源不起冲突,利于服务器处理大量高并发连接。当事务提交时,保存脏数据,后续在刷新到磁盘。

innodb_log_file_size

这个选项决定着性能,这个过程需要停止mysql服务数据在不断变化,数据库性能随着数据量的变大而变低。[/。

对于比较小的innodb_buffer_pool_size。

5,在对数据库进行性能分析时,为保障数据库处于高性能状态下,旋转频率太频繁。

innodb_log_group_home_dir调整日志文件位于目录.

重新启动mysql服务

该过程将会按照新的日志配置来创建日志文件。同时,有时改变innodb日志文件大小或数量.

按照要求调整日志文件大小或数量并写入到my.cnf文件中

innodb_log_file_size调整日志文件大小,要慎重设置。[/,建议是设置一样大。

但是,对于比较大的innodb_buffer_pool_size,不建议这么设置,这会存在一个潜在的问题,那就是当mysql挂掉时,innodb_log_buffer_size和innodb_log_file_size也应该做出相应的调整.

备份旧的日志文件。

innodb_log_files_in_group调整日志文件数量


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/7867586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存