5 mysql performance bulk-load load-data-infile
让我说明一下情况.我们试图在适度宽的MyISAM表中插入适度数量的行(大约每天10-20M):
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| blah1 | varchar(255) | NO | PRI | | |
| blah2 | varchar(255) | NO | PRI | | |
| blah3 | varchar(5) | NO | PRI | | |
| blah4 | varchar(5) | NO | PRI | | |
| blah5 | varchar(2) | NO | PRI | | |
| blah6 | varchar(2) | NO | PRI | | |
| blah7 | date | NO | PRI | | |
| blah8 | smallint(6) | NO | PRI | | |
| blah9 | varchar(255) | NO | PRI | | |
| blah10 | bigint(20) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
除了那个主键之外唯一的索引是在blah7,即日期字段.我们正在使用LOAD DATA INFILE并且看到令我感觉非常糟糕的性能,加载数据大约需要2个小时.我被引导相信LOAD DATA INFILE比那个快几个数量级.
有趣的是,我们还有一些较少的胖表(5-6个字段),我们也使用LOAD DATA INFILE批量处理数据,我们看到它们的性能要好得多.记录的数量相当小,这使我认为当我们加载大表时,我们正在运行缓冲区大小限制,并且必须转到磁盘(实际上,除了转到磁盘之外还有其他什么解释这种缓慢的加载时间?).
......这让我想到了我的问题.处理LOAD DATA INFILE命令时my.cnf设置最重要的是什么?
插入索引通常会导致性能下降.在插入数据和重新索引之前删除索引可能会更好.
来自http://forum.percona.com/s/m/983/:
通常情况下,MySQL在MyISAM表中加载数据的速度相当快,但是存在异常,即它不能按排序重建索引,而是逐行构建它们.它可能由于错误的配置(即myisam_max_sort_file_size或myisam_max_extra_sort_file_size太小)而发生,或者如果你有大的(不适合内存)PRIMARY或UNIQUE索引,它可能只是缺乏优化.
另请查看http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/和http://www.linuxtopia.org/online_books/database_guides/mysql_5. 1_database_reference_guide/insert-speed.html.
| 归档时间: |
|
| 查看次数: |
6411 次 |
| 最近记录: |