Почему импорт файла 12 ГБ. SQL занимает более 36 часов?
Вопрос
Я ждал 36 часов, чтобы импортировался файл 12 ГБ .SQL с простым type site.sql | mysql
командование Я вижу ibdata1
Растет все еще, в настоящее время почти 40 ГБ.
Учитывая, что триггеры и сохраненные процедуры находятся в конце .SQL, я думаю, что MySQL должен добавлять данные и ключевые индексы.
Site.sql был сгенерирован с использованием этой команды с другого сервера:
mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers
Что займет так долго?
Решение
Попробуй это:
$ ps -ef|grep [m]ysql
Определите идентификатор процесса, тогда
$ strace -cp <pid>
Оставить это 10 секунд или минуты тогда ^C
. Анкет Это скажет вам, где процесс тратит свое время, например, он может просто ждать диска, если вы увидите read
а также write
доминировать.
Другие советы
У вас есть таблицы Innodb с первичным ключом
- Содержит несколько столбцов?
- имея широкий варчар?
- И много неаникальных индексов?
- Один или несколько индексов, не являющихся юниками, которые имеют широкий ключ?
Любое из этих условий, вероятно, может привести к тому, что большие узлы Btree в ваших индексах имеют очень мало листьев в каждом узле Btree. Ключ кластера в первичной клавише также прикреплен к каждой некноячевой клавиш в некластерированных клавишах.
Другое соображение: значительно ли сумма страниц данных InnoDB значительно меньше, чем страницы индекса InnoDB?
Вы можете узнать это с этим запросом (в MB):
SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';
Дополнительное рассмотрение: у вас есть бинарное ведение журнала на загрузке DB -сервера? Если вы, пожалуйста, сделайте это на загрузке сервера:
mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"
Надеюсь, это поможет !!!
Вы уверены, что таблицы, в которых вы читаете, без триггеров, индексов и ограничений? На каком оборудовании и ОС вы работаете? Как настроено ваше хранилище?
Я больше знаком с Oracle, но импортируется 12G на таблицах без триггеров, индексы и ограничения должны легко идти с 200 ГБ/ч. Один триггер может сделать процесс на улитку, в зависимости от того, что делает эти триггеры ...
надеюсь, это поможет