Online video hd

Смотреть гиг видео

Официальный сайт pepsilight 24/7/365

Смотреть видео бесплатно

26.03.09 14:29

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 во многих случаях работает достаточно хорошо и с настройками по умолчанию. Я встречал множество гигабайтных баз данных, которые вполне нормально работали со стандартными настройками.


Теги:

booley 26.03.09 14:42 # +0
Я все-таки предпочту MyISAM.
Username 26.03.09 14:42 # +0
а я даже не понимаю, о чем идет речь :)
nvbn 26.03.09 14:51 # +-2
Я буду ответственно относиться к безопасности своих приложений.
krig 26.03.09 14:54 # +2
Предпочитаю смешанные базы. Почти все таблицы в InnoDB - потому что без констрейнтов получается каша в базе. Тексты, по которым предполагается поиск, помещаются в отдельные таблицы с MyISAM, и на нужные поля навешивается FULLTEXT индекс. Динамические таблицы (предполагающие очень частые изменения) живут на MEMORY (такое случается крайне редко, но случается).
xT 26.03.09 15:03 # +2
Да-да, ты рассказывал
vitroot 26.03.09 18:29 # +4
однозначно InnoDB. И именно из-за блокировок/транзакций. С другой стороны, если обыкновенная табличка типа "id | login | passwd | ban ", то о тех же транзакциях и речи нет, достаточно MyISAM

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 154)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3097 из 229 городов)
            Топ пользователей Топ блогов
            welinux.ru

            В хорошем качестве hd видео

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн