innodb为什么写入数据快_mysql5.7如何优化写入性能

本文介绍了如何通过调整MySQL的innodb_log_buffer_size和innodb_flush_log_at_trx_commit参数来提升数据库的写入速度。innodb_log_buffer_size用于设置事务日志缓冲区大小,一般设置为16MB至64MB。而innodb_flush_log_at_trx_commit参数控制事务提交后的日志写入频率,选择0、1或2分别对应不同的性能与安全性权衡。建议对数据完整性和一致性要求不高的应用设置为2,而对于高一致性的场景,推荐设置为1。此外,innodb_log_file_size参数影响日志文件大小,更大的文件能提供更高性能,但恢复时可能更耗时。建议根据服务器资源设定合适大小。
cb637eb4196bcfe823254bc84601c39e.png

为了提高写入速度,我们主要从数据库日志和数据写入开始,可以将下面配置参数初始化到my.cnf 中去

innodb_log_buffer_size

事务日志所使用的缓冲区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer 中,当满足innodb_flush_log_trx_commit 参数所设置的相应条件(或者日志缓冲区写满)时, 再将日志写到文件(或者同步到磁盘)中。

可以通过innodb_log_buffer_size 参数设置其可以使用的最大内存空间。 默认为8MB,一般设置为16~64MB即可。

innodb_flush_log_at_trx_commit

该参数可以理解为 InnoDB 在事务提交后的日志写入频率。默认值为1,有0、1、2三个可选值

0: log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,

但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失。

1: 每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。

2:每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。

上面说到的「最后 1s」并不是绝对的,有的时候会丢失更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1.

这里我们建议设置为2 即 innodb_flush_log_at_trx_commit=2

innodb_log_file_size

默认是8MB,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入Innofb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,

才会将日志写到文件 (或者同步到磁盘)中对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间

innodb_log_file_size = 512M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值