公司开发的某个产品需要从文本格式的文件导入大量数据, 其中某一个表特别大, 数据文件有接近30G, 大概有6千万行数据. MySQL提供了很强大的工具, load data infile, 具体格式不去介绍了, 它的主要优势在于批量插入数据.
服务器是20核 cpu.
MySQL 部分配置大概如下:
innodb_buffer_pool_size = 20000M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
直接开始load数据, 结果悲剧开始了, 命令执行了1个小时,没结果, 2个小时, 还是没结果.
开另外一个终端连到数据库, 查询当前表的行数, 结果是0, 说明 load data infile是一个transaction, 在当前的隔离级别下, 没load完是看不到数据的.
用TOP看了一下资源使用情况, MySQL 只使用了接近100%的CPU(最高2000%).