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

StackOverflow https://stackoverflow.com/questions/457060

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

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

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

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

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

Редактировать:

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

Это было полезно?

Решение

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

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

Другие советы

15 минут мне не кажутся чрезмерными.В конце концов, это единовременная стоимость.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top