Назад | Перейти на главную страницу

Есть ли какие-либо серьезные проблемы с производительностью, если вы переключите настройку механизма хранения по умолчанию с InnoDB на MyISAM?

Недавно мы обновили версию MySQL на сервере базы данных. Почти все наши таблицы находятся в MyISAM, но в my.ini мы установили

--default-storage-engine=InnoDB

Но теперь мы хотим изменить этот параметр на MyISAM, потому что раньше мы использовали MyISAM в качестве механизма по умолчанию.

--default-storage-engine=MyISAM

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

Это устаревшее приложение, для которого мы используем эту базу данных, поэтому почти все таблицы используют MyISAM двигатель. Мы не используем транзакции БД в приложении.

Версия MySQL: 8.0 ОС: Windows Server

Если несколько запросов могут выполняться одновременно (например, многопользовательская среда), вам следует запланировать переход на InnoDB для всех таблиц. Я бы также запустил MySQL на машине Linux.

Чтобы изменить движок, вы должны экспортировать базу данных с помощью mysqldump, затем изменить движок в дампе и импортировать его обратно. Вы также можете использовать ALTER TABLE mytable ENGINE=InnoDB; для каждой таблицы вашей схемы. Не меняйте движок БД для mysql схема.

Изменение механизма хранения по умолчанию влияет только на новые таблицы, созданные с помощью CREATE TABLE оператор без указания ядра базы данных.

Итак, если вы не планируете создавать новые таблицы, нет никакой разницы, какие настройки у вас есть в файле конфигурации.

MyISAM не имеет свойств ACID транзакции. Я бы перешел на InnoBD. Я могу ошибаться.

default_storage_engine применяется только к вновь созданным таблицам. То есть изменение параметра не изменит существующие таблицы.

Чтобы фактически изменить таблицы, используйте ALTER TABLE name ENGINE=engine (для каждой таблицы).

Выполните одно из этих действий до и после преобразования, чтобы убедиться, что преобразование произошло:

SHOW TABLE STATUS;   -- has a column for "engine"

SHOW CREATE TABLE name;   -- shows the engine= clause at the end

Возможно, единственная задача, которая может быть значительно медленнее в InnoDB, - это

SELECT COUNT(*) FROM name;

без WHERE пункт. Вы часто этим пользуетесь? Мы можем обсудить обходные пути. То же самое и для любого другого запроса, который вы определяете, выполняется медленнее.

Я настоятельно рекомендую вам перейти на InnoDB, прежде чем он будет удален из MySQL. Проблемы миграции: http://mysql.rjweb.org/doc.php/myisam2innodb