Параметры более высокой скорости для выполнения очень большого (20 ГБ) файла .sql в MySQL

Моя фирма получила файл .sql объемом 20+ ГБ в ответ на запрос данных от правительства. У меня не так много вариантов получения данных в другом формате, поэтому мне нужны варианты того, как импортировать их в разумные сроки. Я запускаю его на высокопроизводительном сервере (Win 2008 64bit, MySQL 5.1), используя инструмент пакетного выполнения Navicat. Он работает уже 14 часов и не показывает никаких признаков того, что он близится к завершению.

Кто-нибудь знает какие-нибудь варианты более высокой скорости для такой транзакции? Или это то, чего я должен ожидать, учитывая большой размер файла?

Спасибо


person Jonogan    schedule 11.05.2010    source источник


Ответы (4)


Я думаю, вы имеете в виду, что это файл, созданный mysqldump в качестве резервной копии базы данных, поэтому он содержит в основном операторы CREATE TABLE и INSERT.

(Но, строго говоря, сценарий SQL может содержать что угодно, например определение и выполнение длительно выполняющихся хранимых процедур, запросы, приводящие к тупикам и т. Д. Я предполагаю, что это не.)

Вот несколько вещей, которые вы можете сделать, чтобы ускорить восстановление, учитывая, что у вас есть файл резервной копии и вы не можете изменить его тип:

  1. Отключить проверку внешнего ключа: SET FOREIGN_KEY_CHECKS=0 (не забудьте после этого снова включить). Отключите также уникальные проверки: SET UNIQUE_CHECKS=0

  2. Убедитесь, что ваш key_buffer_size установлен. как можно больше, если вы используете таблицы MyISAM. Значение по умолчанию - 8 МБ, максимальное - 4 ГБ. Я бы попробовал 1Гб.

    Эти первые советы взяты из сообщения Барона Шварца: http://lists.mysql.com/mysql/206866

  3. Убедитесь, что ваш innodb_buffer_pool_size установлен как большой насколько возможно, если вы используете таблицы InnoDB. Значение по умолчанию - 8 МБ, максимальное - 4 ГБ. Я бы попробовал 1Гб.

  4. Установите innodb_flush_log_at_trx_commit = 2 во время восстановления, если вы используете Таблицы InnoDB.

  5. @Mark B добавляет ниже хорошее предложение, чтобы отключить ключи во время восстановления. Вот как вы это делаете:

    ALTER TABLE <table-name> DISABLE KEYS;
    ...run your restore...
    ALTER TABLE <table-name> ENABLE KEYS;
    

    Но эта команда одновременно влияет только на одну таблицу. Вам нужно будет ввести отдельную команду для каждой таблицы. Тем не менее, часто бывает, что одна таблица намного больше, чем другие таблицы, поэтому вам может потребоваться отключить ключи только для этой одной большой таблицы.

    Кроме того, если сценарий SQL, содержащий ваше восстановление, удаляет и воссоздает таблицы, это позволит обойти отключение ключей. Вам нужно будет найти способ вставить команды для отключения ключей после создания таблицы и до вставки строк. Возможно, вам придется проявить творческий подход к sed, чтобы предварительно обработать сценарий SQL перед его отправкой клиенту mysql.

  6. Используйте версию mysqldump для Percona Server с --innodb- optimize-keys.

person Bill Karwin    schedule 11.05.2010
comment
Также может потребоваться отключить ключи в таблицах на время импорта. Обычно это убийца крупного импорта - массовое обновление ключей. - person Marc B; 11.05.2010

Существует множество инструментов, но для этого я бы порекомендовал Navicat GUI. По моему опыту, он может запускать 48 ГБ файлов * .sql за 6 часов на хосте с 8 ГБ ОЗУ.

Объяснение (вроде) здесь: введите описание изображения здесьПовторно щелкните выбранную БД, выберите «Выполнить файл SQL», выберите файл, выберите «продолжить при ошибке», если хотите, и, наконец, запустите его. Я знаю, что он показывает базу данных MySQL, но работает с наиболее часто используемыми / популярными СУБД.

Я серьезно не советую «открывать» файл таких пропорций в их построителе запросов sql, это заблокировало бы машину, так как оперативная память снова и снова будет загружена на полную мощность.

Это также работает в ОС Macintosh в качестве хоста приложения Navicat, и как только вы подключитесь к определенному серверу БД, вы можете запускать его где угодно, до сих пор довольно хорошо работая на RHEL, Ubuntu Server, Debian и Windows Server.

person Luis    schedule 02.07.2015

Для этого используйте BULK Import в MySQL.

person Raj More    schedule 11.05.2010

Запросите только определения таблиц и данные в формате .csv. Затем выполните массовый импорт.

person BlueRaja - Danny Pflughoeft    schedule 11.05.2010