Какие таблицы должны или могут быть перенесены в InnoDB, а какие должны остаться MyISAM?

10

По названию: есть ли быстрый список кандидатов для таблиц для переноса в InnoDB? И что должно остаться MyISAM.

Некоторая дополнительная информация

  • Сайт имеет довольно большую нагрузку для чтения, но вставляет примерно 10 узлов в час с тегами и тому подобным.
  • Мы интенсивно используем CCK (огромное количество нормализованных таблиц в форме content_field%).
  • Мы также используем Views для всех наших блоков и страниц; но многие из них являются кандидатами на замену пользовательскими модулями (чтобы уменьшить количество запросов к базе данных и их интенсивность).
  • Все пользователи анонимны; за исключением нескольких зарегистрированных в редакторах и веб-мастерах.
Беркеш
источник
Весь мир не знает, как на самом деле ответить на этот вопрос. Какие таблицы Drupal берут большинство записей и блокируются .... кто знает.
Дж. М. Беккер

Ответы:

8

Вы должны преобразовать все данные в InnoDB, чтобы предотвратить проблемы с блокировкой таблицы. Однако вот о чем стоит подумать:

ПОЛНАЯ ТЕКСТОВАЯ индексация

В настоящее время только MyISAM поддерживает индексацию FULLTEXT. Индексирование FULLTEXT для InnoDB в настоящее время находится в разработке для MySQL 5.6, но не готово к работе . Если у вас есть какие-либо таблицы Drupal с индексами FULLTEXT, они не могут быть преобразованы в InnoDB в настоящее время.

ОБНОВЛЕНИЕ по индексации FULLTEXT

MySQL 5.6 теперь GA (для производственного использования). Пожалуйста, попробуйте индексирование FULLTEXT в InnoDB.

Чтобы найти те таблицы, которые имеют FULLTEXTиндекс, выполните этот запрос:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Если строки не возвращаются, преобразуйте все таблицы InnoDB в свое удовольствие. Ранее я писал о том, как преобразовать все таблицы MyISAM в InnoDB, используя только mysql .

MySQL Replication

Если у вас среда с интенсивным чтением, чтение может выполняться быстрее в MyISAM, если вы выполните следующие действия:

  • Настройка Master / Slave Replication
  • Создайте одного или нескольких Прочитанных Рабов под Мастером
  • Добавьте --skip-innodb/etc/my.cnf на всех подчиненных устройствах (преобразует таблицы в MyISAM при загрузке данных в подчиненное устройство).
  • Измените формат строки всех таблиц MyISAM на каждом подчиненном устройстве на ИСПРАВЛЕНО этой командой: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Я разместил что-то об этом в DBA StackExchange
  • Книга MySQL Database Design and Tuning рекомендует использовать ROW_FORMAT=FIXEDна страницах 72,73. Это внутренне преобразует все поля VARCHAR в CHAR. Это увеличит размер таблицы MyISAM, но выполнение SELECT для нее будет намного быстрее. Я могу лично засвидетельствовать это. Однажды у меня был стол, который был 1,9 ГБ. Я изменил формат с ALTER TABLE tblname ROW_FORMAT=FIXED. Таблица закончилась 3,7 ГБ. Скорость SELECTs против него была на 20-25% быстрее без улучшения или изменения чего-либо еще.

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

Эпилог

Если вы смотрите на другие преимущества каждого механизма хранения, проверьте DBA StackExchange:

RolandoMySQLDBA
источник
4

Поскольку ваш веб-сайт предназначен для чтения, я просто конвертирую все таблицы в InnoDB. После этого вы сможете оптимизировать производительность чтения, правильно определив размер пула буферов InnoDB и кэша запросов. Таким образом, мы выполняем несколько тысяч запросов в секунду на выделенных серверах баз данных в нашей инфраструктуре хостинга Drupal.

geewiz
источник