相关疑难解决方法(0)

使用 InnoDB 引擎输入几场演出后,MySQL LOAD DATA INFILE 速度降低了 80%

我正在通过 LOAD DATA INFILE 加载一个 100GB 的文件。我在 MyISAM 上取得了很好的成功,几个小时就完成了。

我现在正在尝试使用 InnoDB。负载以超过 10MB/秒的速度快速启动(观察表文件增长,file_per_table已打开)。

但是在大约 5GB 的数据之后它会减慢到 2-4MB/秒的范围,当我超过 20GB 时它会下降大约 2MB/秒。

InnoDB 缓冲池大小为 8G。在运行 LOAD DATA INFILE 命令之前,我已经完成了以下操作:

SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它开始良好并随着时间的推移放缓。

此外,使用相同的设置,我使用 InnoDB 和 MyISAM 以及 5GB 测试数据集对表运行相同的 LOAD DATA INFILE 命令,MyISAM 速度提高了 20 倍:

InnoDB:

mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam performance

14
推荐指数
3
解决办法
3万
查看次数

在分析 LOAD DATA INFILE 语句的 mysql 中,“系统锁”是什么意思?

使用 LOAD DATA INFILE 插入到 innodb 的 2M 行需要 7.5 分钟,分析显示 99% 的时间在“系统锁定”中

这能告诉我什么有用吗?

   mysql> set profiling=1;
   Query OK, 0 rows affected (0.00 sec)

   mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
   Query OK, 1964807 rows affected, 8 warnings (7 min 27.35 sec)
   Records: 1964806  Deleted: 1  Skipped: 0  Warnings: 8

   mysql> show profile for query 1;
   +------------------------------+------------+
   | Status                       | Duration   |
   +------------------------------+------------+
   | starting                     |   0.000206 |
   | checking permissions         |   0.000015 | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb profiler

6
推荐指数
2
解决办法
3万
查看次数

标签 统计

innodb ×2

mysql ×2

myisam ×1

performance ×1

profiler ×1