面:现在我需要你插入40万条数据,怎么优化让我更快插入

文章讲述了在MySQL中,通过调整InnoDB_flush_log_at_trx_commit和sync_binlog参数,如何将40万条数据插入的时间从近9分钟优化到18秒,性能提升约30倍,但需权衡安全性和性能需求。
摘要由CSDN通过智能技术生成

目前lnnodb_flush_log_at_trx_commit=1的时候插入40万条数据需要

mysql>  CALL InsertData();
Query OK, 1 row affected (8 min 40.16 sec)


将近9分钟,太慢了

因为参数为1时,每一个事务都要写到磁盘里面去,太慢了,虽然安全,但是效率太低,要寻找平衡点

将lnnodb_flush_log_at_trx_commit=2时,让他每秒刷新一次磁盘,可以发现快了将近一倍

mysql>  CALL InsertData();
Query OK, 1 row affected (4 min 59.48 sec)

这是对于redo log的提交的优化,当然我们还可以对于sync_binlog进行修改

默认的sync_binlog=1,每次有一个日志就需要写入到磁盘,太慢了,虽然安全性好,但是性能低

这里我们将参数调整为sync_binlog=1000,当满足提交日志组的数量达到这个上限时调用文件系统的sync进行缓存的刷新,磁盘里面去

mysql> call  InsertData();
Query OK, 1 row affected (3 min 32.48 sec)

上面是分别对于sync_binlog和lnnodb_flush_log_at_trx_commit参数的修改,接下来对于两个参数都进行修改,可以发现速度快了不少

mysql>  CALL InsertData();
Query OK, 1 row affected (18.03 sec)

目前使用了这两个方面进行优化,还有其他方面例如,mysql认为的磁盘性能的iops的情况,以及redo log的文件大小和个数,缓冲区大小,以及其他的都是需要考虑的地方

可以发现,我们通过这样的方式优化以后,性能提升了近30倍,但是安全性降低了,要看实际的运用场景了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值