mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决

Posted jpfss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决相关的知识,希望对你有一定的参考价值。

问题:

最近在做性能测试,造数据,发现insert好慢,只有几十条每秒,很奇怪,最后再网上找到了原因。

网文如下:

MY SQL insert 速度过慢
最近在用mysql做存储,测试中发现插入数据太慢了,插入速度只有20-30 条/秒,后来查资料后,将MySQL的1个参数:innodb_flush_log_at_trx_commit,1改为了0(修改方法,可以直接修改my.ini(windows)/my.cnf(linux)中的对应参数,似乎用命令直接设置没有效果),插入速度就提升到了3000+每S,MySQL的文档中,对这个参数的描述如下:
If the value of innodb_flush_log_at_trx_commit is 0, the log buffer is written out to the log file once per second and the flush to disk operation is performed on the log file, but nothing is done at a transaction commit. When the value is 1 (the default), the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file. When the value is 2, the log buffer is written out to the file at each commit, but the flush to disk operation is not performed on it. However, the flushing on the log file takes place once per second also when the value is 2. Note that the once-per-second flushing is not 100% guaranteed to happen every second, due to process scheduling issues. 

这样,如果transaction commit的频率非常高,1秒钟内会进行很多次的话,可以考虑将其设置为0,但这样就要承担数据库Crash后,1秒内未存储到数据库数据丢失可能的风险


设置后重启mysql,再重新执行存储过程,基本上插入速度能达到6000条/s。

以上是关于mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决的主要内容,如果未能解决你的问题,请参考以下文章

记录一次mysql导入千万条测试数据过慢的问题!

mysql数据删除过慢

解决mysql导入数据文件过慢的问题

MySql中插入乱码问题解决

mysql中insert与select的嵌套使用解决组合字段插入问题

postgresql 数据库 INSERT 或 UPDATE 大量数据时速度慢的原因分析