首页 > 解决方案 > 在 LOAD DATA INFILE 之后没有查询在表上工作

问题描述

我尝试使用 InnoDB 引擎和 LOAD DATA INFILE 命令将大型 CSV 文件(14.8GB)上传到 MySQL 数据库。查询已完成,因为 InnoDB 状态显示插入的总行数:

--------------
 ROW OPERATIONS
 --------------
 1 queries inside InnoDB, 0 queries in queue
 1 read views open inside InnoDB
 Process ID=5592, Main thread ID=0000000000001D80 , state=sleeping
 Number of rows inserted 200370545, updated 387, deleted 6, read 12473
 0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
 ----------------------------
 END OF INNODB MONITOR OUTPUT
 ============================

查询完成后,在对表进行任何操作之前,MYSQL Workbench 中弹出一个错误(“索引超出范围”),我强制关闭程序,因为它没有响应。

现在,我在这个表上尝试的任何查询都会卡在“发送数据”状态,即使是最简单的 SELECT * FROM 表

4   event_scheduler localhost       Daemon  28941   Waiting on empty queue  
27  root    localhost:62797 truck_database  Sleep   820     
28  root    localhost:62798 truck_database  Query   1339    Sending data    SELECT * FROM gps_data LIMIT 10
29  root    localhost:62800 truck_database  Sleep   130     
30  root    localhost:62801 truck_database  Query   0   starting    show processlist

我之前已经将相同的 CSV 文件加载到另一个 MySQL 服务器,它在那里工作得很好。唯一不同的是,这次我尝试一次性上传整个文件,而不是把它切成小块。

似乎该表以某种方式损坏,可能是在强制关闭 Workbench 之后。有什么办法可以检查是否是这种情况?我知道的唯一命令是 SHOW TABLE STATUS ,这是我得到的结果:

gps_data    InnoDB  10  Dynamic 134694075   141 19028508672 0   0   3145728     2019-03-07 17:21:28         utf8mb4_0900_ai_ci                  

此外,知道我在加载数据之前将 InnoDB_buffer_pool_size 修改为 5G 并且我刚刚将其设置回 500M 可能也很重要。这是我对 my.ini 所做的唯一修改

标签: mysqlinnodbload-data-infile

解决方案


推荐阅读