Изменение таблиц с MyISAM на InnoDB замедляет работу системы

Привет, я использую Mysql 5.0.x

Я только что изменил множество таблиц с MyISAM на InnoDB

С таблицами MyISAM для установки нашей базы данных потребовалось около 1 минуты. С InnoDB требуется около 15 минут для установки той же базы данных.

Почему InnoDB занимает так много времени?

Что я могу сделать, чтобы ускорить процесс?

При установке базы данных выполняются следующие шаги

1) Удаляет схему

2) Создайте схему

3) Создание таблиц

4) Создайте хранимые процедуры

5) Вставьте данные по умолчанию

6) Вставить данные через хранимую процедуру

РЕДАКТИРОВАТЬ:

Вставка данных по умолчанию занимает большую часть времени.


person Charles Faiga    schedule 19.01.2009    source источник
comment
Какой шаг занимает большую часть времени?   -  person Zoredache    schedule 19.01.2009


Ответы (3)


Измените шаг «Вставить данные», чтобы начать транзакцию в начале и зафиксировать ее в конце. Вы получите улучшение, я это гарантирую. (Если у вас много данных, вы можете разбить транзакцию до каждой таблицы.)

Если ваше приложение вообще не использует транзакции, вам следует установить для параметра innodb_flush_log_at_trx_commit значение 2. Это вернет вам большую производительность, потому что у вас почти наверняка будет включен auto_commit, и это генерирует намного больше транзакций, чем настроены параметры InnoDB по умолчанию. за. Этот параметр предотвращает ненужную очистку дисковых буферов при каждой фиксации.

person staticsan    schedule 29.04.2009
comment
Я согласен с вами по поводу innodb_flush_log_at_trx_commit ,. для случаев, когда InnoDB используется в качестве замены MyISAM, тогда это лучший вариант. - person ovais.tariq; 03.06.2011
comment
И еще. Вставьте данные в таблицу innodb в порядке первичного ключа. - person ovais.tariq; 03.06.2011

15 минут мне не кажутся лишними. В конце концов, это единовременные расходы.

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

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

person duffymo    schedule 19.01.2009
comment
Возможно, также рассмотрите возможность использования одной транзакции вместо автоматической фиксации. - person falstro; 19.01.2009
comment
@roe - спасибо - единая транзакция ускоряет работу - person Charles Faiga; 19.01.2009

Как сказал Даффимо, отключите свои ограничения (индексы и внешние / первичные ключи) перед вставкой данных.

Возможно, вам следует восстановить некоторые индексы до данных, вставленных с помощью хранимой процедуры, если в ней используется много операторов select

person Rafael Mueller    schedule 19.01.2009