在使用存储过程进行千万条数据的插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数
我做了以下几个参数的修改
- innodb_log_file_size = 1024M
日志组中的每个日志文件的大小,设置较大的值可以减少脏数据刷新到磁盘的次数
- innodb_log_buffer_size = 256M
将日志写入日志磁盘文件前的缓冲大小,默认是16M,设置较大的值可以使日志在缓冲时不需要被保存到磁盘,减少磁盘读取次数
- innodb_flush_log_at_trx_commit = 0
将日志中的缓冲数据写入磁盘,默认为1,即每次提交事务都会写入磁盘,改为0后将减少写入磁盘的次数
- innodb_buffer_pool_size = 4G
该值用来高速缓冲数据和索引内存缓冲大小,也是减少磁盘IO来增加速度,一般设置为物理存储的60%~70%
- innodb_buffer_pool_instances = 4
增加多个缓冲池,提高并行内存读写能力
- innodb_write_io_threads = 8 && innodb_read_io_threads = 8
增加IO线程数,提高读写能力,根据机器的处理器来设置
- innodb_io_capacity = 500
提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力,默认200
以上参数修改都是通过减少对磁盘的IO操作来实现的,包括关闭了MySQL默认的事务存储到磁盘的操作,增大缓冲区的容量,这样子容易造成MySQL服务器宕机的时候,数据大量丢失,建议不要在生产环境下修改这些配置,根据实际情况修改
本文转自:https://blog.csdn.net/qq_36182135/article/details/84854619