提高InnoDB导入数据的速度

向mysql中导入维基百科的数据(数据源中sql的部分,总数据20g,单条sql 100MB--5GB),导入速度太慢,1个晚上才导入不到1GB,如何提高导入速度。主键唯一性检验和自动提交都已经关了。

阅读 6.2k
4 个回答

之前回答过一个类似的问题,思路如下:
对于insert方式写入优化点:
1、insert批量执行,禁止单条insert value(注意单条sql长度限制,可临时调整max_allowed_packet)
2、开启事务处理,批量提交。原理类似上1(条件允许可适当增大innodb_log_buffer_size,增加单事务提交日志量,该参数read only)
3、主键顺序插入,效率更高
4、业务允许,暂时disable keys
其他录入方式,比如load data是比较快的,可以试试

另外如果业务允许,暂时禁用binlog,并将redolog文件采用软连接的方式放入内存减少磁盘io(同样也可以把你的表数据文件放入内存目录/dev/shm,要求内存足够),要记得导入完成重新放入磁盘,以上两种方式导入均可采用此方式减少磁盘io

论写入速度,innodb还是比不过myisam,要不换成myisam试试?大量的文档型数据的话是不是用mongodb比较好

现在每秒是多少条记录?
索引,日志,全部停掉,如果这样还不行,那就没办法了, MySQL 就这点本事,别要求太高 :)

@clcx_1315 说的比较全了,补充几条:
1、把所有索引定义删除,等导入完成后再重建,记得备份索引定义条件。
2、看一下数据库服务器的IO负载,如果IO未达到80%,可以将拆分为文件多个并行执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏