批量数据导入优化

插入行所需的时间由以下因素决定[https://dev.mysql.com/doc/refman/5.7/en/insert-optimization.html](mysql manual)

  • 连接:30%
  • 向服务器发送查询:20%
  • 解析查询:20%
  • 插入行:10% * 行的大小
  • 插入索引:10% * 索引数
  • 结束:10%

一次插入多行的值

有大批量导入时,推荐一条insert语句插入多行数据。

原因:减少服务器通信时间

关闭自动提交

Autocommit 开启时会为每个插入执行提交。可以在InnoDB导入数据时,关闭自动提交。

原因:合并提交可以减少客户端与服务端通信的时间,减少数据落盘的次数。

参数调整

innodb_flush_log_at_trx_commit:控制重做日志刷新到磁盘的策略

  • 0:master线程每秒把redo log buffer写到操作系统缓存,再刷到磁盘;
  • 1:每次提交事务都将redo log buffer写到操作系统缓存,再刷到磁盘;
  • 2:每次事务提交都将redo log buffer写到操作系统缓存,由操作系统来管理刷盘。

sync_binlog:控制binlog的刷盘时机

  • 0:二进制日志从不同步到磁盘,依赖OS刷盘机制;
  • 1:二进制日志每次提交都会刷盘;
  • n(n>1) : 每n次提交落盘一次。

innodb_flush_log_at_trx_commit设置为0、同时sync_binlog设置为0时,写入数据的速度是最快的。

posted on 2021-03-13 15:33  hainingwyx  阅读(115)  评论(0编辑  收藏  举报

导航