我们目前正在对MySQL进行几项性能测试,以将其与我们为数据库原型开发的方法进行比较。简而言之:数据库为空,给定一个巨大的csv文件,尽可能快地将数据加载到内存中。MySQL批量插入LOAD INFILE - MyISAM仅比MEMORY引擎慢
我们正在测试具有48 GB RAM的12核Westmere服务器,因此内存消耗现在不是真正的问题。
问题是以下几点。我们没有选择MySQL(广泛传播,开源)进行比较。由于我们的原型是一个内存数据库,我们选择了MySQL中的内存引擎。
我们插入这种方式(文件是高达26 GB大):
drop table if exists a.a;
SET @@max_heap_table_size=40000000000;
create table a.a(col_1 int, col_2 int, col_3 int) ENGINE=MEMORY;
LOAD DATA CONCURRENT INFILE "/tmp/input_files/input.csv" INTO TABLE a.a FIELDS TERMINATED BY ";";
,在2.6 GB的文件执行此负载需要大约80秒,这是比较慢四倍的(wc -l
)。即使正在写入磁盘,使用MyISAM的速度也只有4秒。
我在做什么错在这里?我猜想使用内存引擎进行数据写入必须比使用MyISAM快得多。我不明白为什么wc -l
(单线程,但写入内存不那么慢)是更快。 PS:改变read_buffer_size或任何其他增值税我发现谷歌搜索,没有导致显着的改善。
没有导致可衡量的改进。 :( 甚至试图将bulk_insert_buffer_size设置为512MB。仍然没有改进。 – Bouncner 2012-07-19 11:12:11
对不起,偶然跳过了阅读余下的帖子。: -/ CONCURRENT在我们的机器上稍微微微秒。它只是可测量的,但它是一个改进 我知道写入内存比写不慢。但是由于I/O输入的单字符读取,这些加载时间非常缓慢,因此RAM写入不应该真的变慢。 在我们的原型中,我们使用标准的std :: vectors来编写所有的数据,而且我们的数量级更快。所以写入RAM并不是这里的实际问题。 – Bouncner 2012-07-20 11:13:25