2015-07-09 4 views
1

У меня есть файл объемом 10 ГБ с миллионами строк в 72 таблицах. Мой двигатель для хранения составляет innodb.Импорт 10 ГБ файла SQL

Я создал базу данных со всеми необходимыми таблицами и выдал следующую команду в MySQL строке:

mysql> source path/to/my/sqlfile.sql 

Было бы здорово работать, пока он не получил около 10% пути. Он начнется быстро, и через несколько минут или позже он замедляется до трех секунд в инструкции вставки и замедляет до 10 секунд на каждую вставку.

Он работает в течение трех дней и 30% данных были восстановлены.

Не могу понять, почему это так медленно?

+0

У вас есть внешние ключи или ограничения в ваших таблицах? – vhu

+0

да, база данных разработана очень профессиональными разработчиками баз данных. и он имеет ограничения и внешние ключи для каждой таблицы. –

+0

О, боже, я этого не знал ... спасибо за объяснение. –

ответ

2

Это хорошая идея, чтобы начать загрузку, отключив внешний ключ проверки, чтобы ускорить загрузку:

mysql> SET foreign_key_checks = 0; 
mysql> SOURCE dump_file_name; 
mysql> SET foreign_key_checks = 1; 

Это предложенный manual сделать загрузку проще (таблицы не должны быть загружены в порядке) и быстрее (внешние ключи не проверяются при вставке строки).

Кроме того, вы также можете отключить UNIQUE_CHECKS (SET UNIQUE_CHECKS=0).

Дальнейшая оптимизация довольно сложная, не видя DDL и данные. Существует несколько optionsyoucouldtry.

+0

Спасибо @vhu, я постараюсь сделать это. Я буду держать вас в курсе. –

+0

Привет @vhu. Я изменил свой хранимый движок на Myisam. это действительно быстрее, чем Innodb. мне удалось импортировать около 3 ГБ данных в мою базу данных. после выполнения ваших предложений и во время просмотра командной строки это результат за выполнение в самом начале (Query ok, 7788 строк затронуты <0.2> секунд), но теперь он выполняет очень медленный текущий результат за выполнение (Query ok 7736 rows affected <40.05> секунд) за выполнение. любые другие предложения я был бы очень благодарен. –

Смежные вопросы