gpt4 book ai didi

带有 LOAD INFILE 的 MySQL 批量插入 - MyISAM 仅比 MEMORY 引擎慢

转载 作者:行者123 更新时间:2023-11-29 02:32:06 24 4
gpt4 key购买 nike

我们目前正在对 MySQL 执行多项性能测试,以将其与我们正在为数据库原型(prototype)开发的方法进行比较。简而言之:数据库为空,给定一个巨大的 csv 文件,尽快将数据加载到内存中。

我们正在具有 48 GB RAM 的 12 核 Westmere 服务器上进行测试,因此内存消耗现在不是真正的问题。

问题如下。我们没有选择 MySQL(广泛传播,开源)进行比较。由于我们的原型(prototype)是一个内存数据库,所以我们选择了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 或我在谷歌搜索中发现的任何其他变量并没有带来显着的改进。

最佳答案

也尝试设置以下变量

max_heap_table_size=40GB;
bulk_insert_buffer_size=32MB
read_buffer_size=1M
read_rnd_buffer_size=1M

它可能会稍微减少查询执行时间。

此外,CONCURRENT 仅适用于 MyISAM 表,根据手册,它会减慢插入速度:Load Data Infile

我认为您不能将写入操作的插入速度与读取操作的 wc -l 的速度进行比较,因为写入总是比读取慢。

在 RAM 中加载 2.6GB 数据将花费大量时间。这主要取决于 RAM 的写入速度和操作系统的 IO 配置。

希望这对您有所帮助。

关于带有 LOAD INFILE 的 MySQL 批量插入 - MyISAM 仅比 MEMORY 引擎慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com