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

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

--default-storage-engine=InnoDB

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

--default-storage-engine=MyISAM

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

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

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

0
задан 12 July 2020 в 20:19
4 ответа

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

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

2
ответ дан 4 January 2021 в 09:18

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

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

2
ответ дан 4 January 2021 в 09:18

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

0
ответ дан 4 January 2021 в 09:18

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

0
ответ дан 4 January 2021 в 09:18

Теги

Похожие вопросы