Mysql提高批量Insert性能

一、使用批量插入,将多条单独的insert合并成一次操作。

insert into table values (a1,b1,c1),(a2,b2,c2);

解析:将多条insert合并,减少Mysql日质量(即binlog和redolog的事务日志),降低日志刷盘的数据量和频率,从而提高频率。

通过合并多条insert语句,还能减少SQL语句的解析次数,减少和数据库的交互,减少网络IO传输。

二、修改批量插入缓冲区大小参数:bulk_insert_buffer_size,调大批量插入缓存。

三、调整刷盘策略innodb_flush_log_at_trx_commit=0;

相对于innodb_flush_log_at_trx_commit=1,设置0可以明显提高导入的速度。

0: log buffer 中的数据将以每秒一次的频率写入到 log file 中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的 commit 并不会触发任何的 log buffer 到 log file 的刷新或者从文件系统到磁盘的刷新操作。

1: 在每次事务提交的时候将 log buffer 中的数据都会写入到 log file,同时也会触发文件系统到磁盘的同步;

2: 事务提交会触发 log buffer 到 log file 的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘的同步操作。
四、设置事务提交为 手动状态

因为 MySQL 事务默认是自动提交的(autocommit),这样每插入一条数据,都会进行一次 commit,所以通过手动提交事务,可以减少创建事务时的消耗。一般可以设置为 1000 条insert 提交一次。

posted @ 2022-09-13 17:33  雷雷提  阅读(1104)  评论(0编辑  收藏  举报