Ускорения импорта дампа для mysql

12
S
На сайте с 09.10.2006
Offline
45
10711

Приветствую гуру, очень нужна ваша помощь!

При переезде на новый сервер делаю импорт базы данных. Импорт длится уже больше 24 часа! При этом сервер, можно сказать простаивает, т.к. 98% процессорного времени idle. Даже renice процессов mysql и mysqld в -20 не дали увеличения скорости выполнения.

Это нормально?? И можно ли как-нибудь увеличить скорость импорта?

Сервер такой конфигурации: Core 2 Quad 2.4 ГГц, 6 Гб RAM, 2x500 Гб SATA RAID-1

На сервере стоит freebsd 7.0, mysql 5.0.45

Дамп базы делался с помощью mysqldump --opt

Основное время импорта занимает импорт таблички, которая в myisam весила где-то 5Гб, а на новом сервере я переконвертировал её в innodb. В табличке 15 столбцов и 11 индексов 6 из них для столбцов типа char (char(32) и char(255)).

p.s. Нужно будет импортировать ещё одну базу, примерно такуюже по размеру, но с дизайном табличек намного лучше чем та о которой я говорил. Делать импорт одновременно для двух баз я побоялся..

Буду очень признателен всем тем, кто откликнется.

D
На сайте с 05.06.2007
Offline
155
#1
Импорт длится уже больше 24 часа!

а точно импортируется? 5ГБ не много, учитывая указанное время ))

сколько строк? можно ведь посмотреть что уже записано в базу в процессе..

Написал не мало шедевров ;)
S
На сайте с 09.10.2006
Offline
45
#2

Записей в таблице порядка 10М, уже большая часть импортировалась (точнее сказать сложно).

Но это не радует всё-равно..

N
На сайте с 06.05.2007
Offline
419
#3

а дался вам этот innodb ? для веб-приложений он не всегда лучше.

сколько занимает в памяти mysqld ?

Кнопка вызова админа ()
S
На сайте с 09.10.2006
Offline
45
#4
netwind:
а дался вам этот innodb ? для веб-приложений он не всегда лучше.
сколько занимает в памяти mysqld ?

innodb дался, т.к. в таблицу идет активная запись и чтение

N
На сайте с 06.05.2007
Offline
419
#5

slip, ну а второй вопрос? вы догадались, что в конфиге mysql отдельные секции для управления памятью innodb ? может их там подкрутить?

cделайте вообще show full processlist и от рута, может прояснит.

странно, как вы смогли посмотреть что там в таблице находится, ведь дамп снятый с -opt добавляет lock table write?

видимо каждый инсерт у вас в одной транзакции и это тормозит.

не могу подтвердить с практической точки зрения, но, возможно, с mysqldump --single-transaction шустрей будет.

теперь, когда дамп снят, остается изобразить это искусственно : cat begin.sql dump.sql end.sql| mysql

P
На сайте с 08.03.2007
Offline
250
#6

либо с транзакциями , либо с дисками - точно диски в порядке?

Andreyka
На сайте с 19.02.2005
Offline
822
#7

Дайте кучу памяти mysql на время импорта

Не стоит плодить сущности без необходимости
S
На сайте с 09.10.2006
Offline
45
#8
netwind:
slip, ну а второй вопрос?

Тогда не помню. Но я уже крутил конфигурацию несколько раз.

вы догадались, что в конфиге mysql отдельные секции для управления памятью innodb ? может их там подкрутить?

Я не догадываюсь, я знаю, как и тот кто настраивал mysql. Правда похоже он не представлял для чего они там нужны.. Что прескорбно конечно. В итоге простой 2 дня...

cделайте вообще show full processlist и от рута, может прояснит.

Что прояснит? Я смотрел процессы мускла - идет импорта update но чем дольше он длится по времени, тем дольше идет каждая вставка.

странно, как вы смогли посмотреть что там в таблице находится, ведь дамп снятый с -opt добавляет lock table write?

Да конечно, добавляет. Смотрел через show processlist т.е. ориентировался по запросам, которые выполняются или точнее по примари кеям.

Pilat:
либо с транзакциями , либо с дисками - точно диски в порядке?

Диски стоят в RAID-1, по идеи не должны тормозит. Вообще вчера когда импортировал табличку наблюдал своппинг на винте ~500M, это при том что оперативы 6Гиг.. Похоже из-за этого всё и тормозило.

Вчера же отказался от затеи импортировать табличку в innodb - настройки mysql для него мне показались уж жутко кривыми, что запускать с ними сайт в работу была бы глупой затеей. И импортировал эту табличку в myisam немного изменив структуру и убрав индексы, чтобы проект уже заработал. Вышло побыстрей, но всё-равно долго.

Решил самому покопаться чуток в настройках mysql и сегодня при импорт innodb выполняется шустрей, при полностью рабочем сайте и свопинга нет кстати тоже нет. тьфу-тьфу-тьфу.

Вот какие настройки под innodb были:


innodb_data_file_path=ibdata1:10M:autoextend
innodb_open_files = 500
innodb_file_per_table
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 64M
innodb_log_file_size = 1M
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 500
interactive_timeout = 30

Такими я их подкрутил:


innodb_data_file_path=ibdata1:1G:autoextend
#innodb_open_files = 500
#innodb_file_per_table
innodb_thread_concurrency = 8
innodb_buffer_pool_size = 3000M
innodb_additional_mem_pool_size = 10M
innodb_log_file_size = 750M
innodb_flush_method=O_DIRECT
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
interactive_timeout = 30

Напомню конфигу:

Core 2 Quad 2.4 ГГц, 6 Гб RAM, 2x500 Гб SATA RAID-1

На сервере стоит freebsd 7.0, mysql 5.0.45

Помоему, тому кто настраивал mysql нужно что-то оторвать :/

Andreyka:
Дайте кучу памяти mysql на время импорта

Я бы с радостью, но не знаю как. Да и сейчас уже наврятли получится с рабочим проектом на сервере. Но всё-равно буду признателен, если подскажешь как это можно сделать.

cray
На сайте с 09.02.2005
Offline
29
#9
slip:
Приветствую гуру, очень нужна ваша помощь!

При переезде на новый сервер делаю импорт базы данных. Импорт длится уже больше 24 часа! При этом сервер, можно сказать простаивает, т.к. 98% процессорного времени idle. Даже renice процессов mysql и mysqld в -20 не дали увеличения скорости выполнения.

<skipped...>

Буду очень признателен всем тем, кто откликнется.

А есть еще вариант - убрать индексы, вставить данные, накатить индексы поверх.

Если вставка идет все медленнее и медленнее, то скорее всего проблема в том, что он постоянно индексы пересчитывает.

Если есть вопросы: ICQ: 87-четыре-78-четыре-2

Sincerely yours, Alexey aka Cray http://www.ЗАБЫЛ.ru/ (http://www.ЗАБЫЛ.ru/)
N
На сайте с 06.05.2007
Offline
419
#10

slip, вроде правильно:

innodb_buffer_pool_size = 3000M

innodb_additional_mem_pool_size = 10M - вот это не маловато?

Хотя можно и больше, ( увеличить, перестартовать mysql,импортировать,уменьшить,перестартовать) раз уж импорт выполняется один раз.

А фря 64битная? а то вдруг 32битная. и значит там PAE. Но тогда, думаю, была бы высокая загрузка процессора.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий