Чому імпорт файлу .sql об'ємом 12 ГБ займає більше 36 годин?


16

Я чекаю вже 36 годин на імпорт файлу .sql 12 ГБ за допомогою простої 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

Що триває так довго?


3
скільки процесора займає mysql? Якщо це низьке значення, це, ймовірно, означає, що ви пов'язані з диском
Дерек Дауні

2
.sql файли насправді не так швидко імпортувати ... насправді швидше перейти на розділення вкладки або CSV, потім створити порожню базу даних та використовувати LOAD DATA INFILE. Крім того, під час переміщення цілої бази даних дивіться мою відповідь про: переміщення баз даних між серверами, якщо ви перебуваєте в одній і тій же головній версії. (особливо, якщо вам доведеться перервати і перезапустити)
Джо,

Відповіді:


23

Спробуйте це:

$ ps -ef|grep [m]ysql

Визначте ідентифікатор процесу тоді

$ strace -cp <pid>

Залиште це на 10 секунд або хвилину ^C. Це підкаже вам, де процес витрачає свій час, наприклад, він може просто чекати диска, якщо ви бачите readі writeдомінуєте.


4
+1, тому що я тільки що дізнався нову команду (strace): P Редагувати: добре лайно, недоступно на моєму комп'ютері за замовчуванням.
Дерек Дауні

2
Це фантастичний інструмент разом із gdb. Я не кажу людям, що їхня програма більше не висіла; Я їм точно кажу, на чому він застряг або крутиться, або з ядра повідомляю їм рядок коду та назву вихідного файлу. Ще більш потужним є dtrace.
Гай

3
Strace - це Linux - еквівалент Solaris - це кроквяна ферма. Dtrace доступний на Mac.
Гай

так воно і є. зараз іду читати.
Дерек Дауні

Остерігайтеся: хороша команда знати, але будьте обережні, ця команда розбила мій екземпляр MySQL. Не знаю чому. Перед тим, як MySQL вийшов з ладу, сервер протягом декількох хвилин переставав відповідати.
dabest1

7

Чи є у вас таблиці InnoDB з первинним ключем

  1. що містить кілька стовпців?
  2. маючи широкий ВАРЧАР?
  3. і багато унікальних індексів?
  4. один чи кілька унікальних індексів, які мають широкий ключ?

Будь-який із цих умов, ймовірно, може призвести до того, що великі BTREE-вузли у ваших індексах мають дуже мало листків у кожному вузлі BTREE. Кластер кластера в первинному ключі також додається до кожного не унікального запису ключа в некластеризованих ключах.

Ще одне врахування: чи сума сторінок даних InnoDB значно менша, ніж індексні сторінки InnoDB?

Ви можете дізнатися це за допомогою цього запиту (у МБ):

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

Додатковий розгляд: чи увімкнено бінарний журнал на сервері БД, який ви завантажуєте? Якщо ви є, будь ласка, зробіть це на сервері, який ви завантажуєте:

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

Я сподіваюся, що це допомагає !!!


6

Ви впевнені, що таблиці, в яких ви читаєте, не мають тригерів, індексів та обмежень? Яке обладнання та ОС ви працюєте? Як налаштовано ваше сховище?

Я більше знайомий з Oracle, але імпорт 12G на таблиці без тригерів, індексів та обмежень повинен легко йти зі швидкістю 200 Гб / год. Один єдиний тригер може зробити процес равликом, залежно від того, що спрацьовує ...

Я сподіваюся, що це допомагає

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.