vrusinov — Нужно ли переходить с MyISAM на Innodb?
Оригинал
Автор: Peter, Percona
Перевод: Vladimir Rusinov
Существует значительная часть проектов, которые используют MyISAM и задаются вопросом, стоит ли им перейти на InnoDB, или же лучше продолжить использовать MyISAM?
Я предпочитаю Innodb в качестве основного движка, потому что для большинства пользователей это делает жизнь намного проще - не приходится беспокоиться о восстановлении таблиц после сбоя, таблицы не блокируются целиком, "горячие" бекапы делать гораздо проще, но есть несколько вещей о которых нужно подумать перед принятием решения о переходе.
MyISAM используется по умолчанию, или это был осмысленный выбор? Это самый главный вопрос. Иногда MyISAM используется только потому что он выбран по умолчанию. В других случаях это намеренный выбор для системы, которая учитывает ограничения MyISAM. В таком случае должен быть хороший аргумент для перехода на Innodb.
Готовность приложения. Приложение должно быть готово для работы с Innodb. К примеру, оно должно быть готово к возникновению дедлоков, которые в Innodb могут случаться даже если вы не используете транзакции, но никогда не случаются в MyISAM. Разумеется перед переходом нужно тщательно протестировать приложение.
Производительность. Innodb предлагает очень много для производительности: как улучшения, так и регрессии производительности. В качестве улучшений мы обычно видим кеширование данных, более высокий параллелизм, фоновая запись на диск, ухудшения - увеличение размера таблиц, обычно более медленная запись, более медленная обработка BLOB'ов, проблемы с работой с очень большим количеством таблиц, медленная загрузка данных и ALTER TABLE, и другие проблемы. Наверное самая известная - низкая производительность COUNT(*) без WHERE, исправление этой проблемы требует модификации приложения.
Операции. То, что хорошо для MyISAM - плохо для Innodb. Очень важно чтобы все в команде понимали Innodb и знали как работать с ним, или хотя бы имели возможность узнать это. Кроме того, нужно проверить насколько хорошо рутинные процессы работают с Innodb. Например, бинарное копирование таблицы с одного из слейвов на машину разработчиков работает нормально в MyISAM и не работает в Innodb. Некоторые утилиты для бекапа (например mysqlhotcopy) не работают, другие вещи могут оказаться намного медленнее с Innodb, например бекап взятый с помощью mysqldump может достаточно быстро восстанавливаться на MyISAM, но очень медленно на Innodb.
Функциональность. Некоторые функции, доступные в MyISAM не доступны в Innodb. Например, полнотекстовый поиск и RTREE индексы. Есть обходные пути для исправления этого, например можно сделать MyISAM-слейв необходимых таблиц, но это конечно же нужно иметь в виду.
Что насчет использования и MyISAM и Innodb? Конечно, это возможно, но нужно использоваться аккуратно, т.к. это усложняет такие задачи как бекапы, балансировка и анализ производительности. Кроме того, это может осложнить жизнь оптимизатору запросов - ему сложнее учитывать стоимость операций в разных движках.
Я предпочитаю выбрать один движок (обычно Innodb), а другой движок использоваться только там где это дает очень хорошие результаты. Я не буду конвертировать таблицу в MyISAM если это не увеличивает производительность более чем на 5%, но определенно буду использовать MyISAM для хранения логов и подобного.
Innodb требует настройки. На самом деле. MyISAM во многих случаях работает достаточно хорошо и с настройками по умолчанию. Я встречал множество гигабайтных баз данных, которые вполне нормально работали со стандартными настройками.
Автор: Peter, Percona
Перевод: Vladimir Rusinov
Существует значительная часть проектов, которые используют MyISAM и задаются вопросом, стоит ли им перейти на InnoDB, или же лучше продолжить использовать MyISAM?
Я предпочитаю Innodb в качестве основного движка, потому что для большинства пользователей это делает жизнь намного проще - не приходится беспокоиться о восстановлении таблиц после сбоя, таблицы не блокируются целиком, "горячие" бекапы делать гораздо проще, но есть несколько вещей о которых нужно подумать перед принятием решения о переходе.
MyISAM используется по умолчанию, или это был осмысленный выбор? Это самый главный вопрос. Иногда MyISAM используется только потому что он выбран по умолчанию. В других случаях это намеренный выбор для системы, которая учитывает ограничения MyISAM. В таком случае должен быть хороший аргумент для перехода на Innodb.
Готовность приложения. Приложение должно быть готово для работы с Innodb. К примеру, оно должно быть готово к возникновению дедлоков, которые в Innodb могут случаться даже если вы не используете транзакции, но никогда не случаются в MyISAM. Разумеется перед переходом нужно тщательно протестировать приложение.
Производительность. Innodb предлагает очень много для производительности: как улучшения, так и регрессии производительности. В качестве улучшений мы обычно видим кеширование данных, более высокий параллелизм, фоновая запись на диск, ухудшения - увеличение размера таблиц, обычно более медленная запись, более медленная обработка BLOB'ов, проблемы с работой с очень большим количеством таблиц, медленная загрузка данных и ALTER TABLE, и другие проблемы. Наверное самая известная - низкая производительность COUNT(*) без WHERE, исправление этой проблемы требует модификации приложения.
Операции. То, что хорошо для MyISAM - плохо для Innodb. Очень важно чтобы все в команде понимали Innodb и знали как работать с ним, или хотя бы имели возможность узнать это. Кроме того, нужно проверить насколько хорошо рутинные процессы работают с Innodb. Например, бинарное копирование таблицы с одного из слейвов на машину разработчиков работает нормально в MyISAM и не работает в Innodb. Некоторые утилиты для бекапа (например mysqlhotcopy) не работают, другие вещи могут оказаться намного медленнее с Innodb, например бекап взятый с помощью mysqldump может достаточно быстро восстанавливаться на MyISAM, но очень медленно на Innodb.
Функциональность. Некоторые функции, доступные в MyISAM не доступны в Innodb. Например, полнотекстовый поиск и RTREE индексы. Есть обходные пути для исправления этого, например можно сделать MyISAM-слейв необходимых таблиц, но это конечно же нужно иметь в виду.
Что насчет использования и MyISAM и Innodb? Конечно, это возможно, но нужно использоваться аккуратно, т.к. это усложняет такие задачи как бекапы, балансировка и анализ производительности. Кроме того, это может осложнить жизнь оптимизатору запросов - ему сложнее учитывать стоимость операций в разных движках.
Я предпочитаю выбрать один движок (обычно Innodb), а другой движок использоваться только там где это дает очень хорошие результаты. Я не буду конвертировать таблицу в MyISAM если это не увеличивает производительность более чем на 5%, но определенно буду использовать MyISAM для хранения логов и подобного.
Innodb требует настройки. На самом деле. MyISAM во многих случаях работает достаточно хорошо и с настройками по умолчанию. Я встречал множество гигабайтных баз данных, которые вполне нормально работали со стандартными настройками.