Я попытался загрузить большой файл CSV (14,8 ГБ) в базу данных MySQL с помощью механизма InnoDB и команды LOAD DATA INFILE. Запрос был выполнен, так как статус 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 table
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