Преобразование MyISAM в InnoDB.Выгодно?Последствия? - PullRequest
6 голосов
/ 05 января 2010

У нас есть сайт социальной сети, который регистрирует действия каждого участника (включая посещение страниц других участников); это включает в себя много записей в БД. Эти действия хранятся в таблице MyISAM, и, поскольку что-то начинает обременять ЦП, моей первой мыслью было, что именно блокировка таблицы MyISAM вызывает такую ​​нагрузку на ЦП.

  • В этой таблице только чтение и запись, никаких обновлений нет. Я думаю, что баланс между операциями чтения и записи составляет 50/50 для этой таблицы, поэтому InnoDB будет лучшим вариантом?
  • Если я хочу изменить таблицу на InnoDB и мы не используем ограничения внешнего ключа, транзакции или полнотекстовые индексы - нужно ли о чем-то беспокоиться?

Ответы [ 4 ]

7 голосов
/ 05 января 2010

Несмотря на любые преимущества / недостатки его использования, которые обсуждаются в других потоках ( MyISAM против InnoDB ), миграция - нетривиальный процесс.

Рассмотрим

  • Функциональное тестирование всех компонентов, которые обращаются к базе данных, если это возможно - разностные механизмы имеют разную семантику
  • Проведите как можно больше тестов производительности - некоторые вещи могут улучшиться, другие могут быть намного хуже. Хорошо известным примером является SELECT COUNT (*) на большой таблице.
  • Проверка того, что весь ваш код будет корректно обрабатывать взаимоблокировки - вы можете получить их без явного использования транзакций
  • Оцените, сколько места вы получите за счет конвертации - проверьте это в непроизводственной среде.

Вам, несомненно, нужно будет что-то изменить в большой программной платформе; это нормально, но, учитывая, что у вас (надеюсь) есть большой охват покрытия для автоматического тестирования, изменения должны быть приемлемыми.

PS: Если «что-то начинает облагать налогом процессор», то вам следует: а) выяснить, что в непроизводственной среде; б) попробовать различные варианты его уменьшения в непроизводственной среде. Вы не должны слепо начинать делать такие важные вещи, как смена движков баз данных, если вы не полностью проанализировали проблему.

Все тесты производительности должны проводиться в непроизводственной среде с данными, подобными производственным, и на оборудовании промышленного уровня. В противном случае трудно правильно интерпретировать результаты.

4 голосов
/ 29 января 2010

Что касается других потенциальных проблем миграции:

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

2) Полнотекстовый поиск - только на MyISAM

3) ГИС / Пространственные типы данных - только на MyISAM

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

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

В зависимости от размера таблиц, вам также может потребоваться обновить конфигурационный файл MySQL. По крайней мере, вы можете захотеть переместить байты из key_buffer в innodb_buffer_pool_size. Вы не получите честного сравнения, если оставите базу данных как оптимизированную для MyISAM. Ознакомьтесь со всеми свойствами конфигурации innodb_ *.

2 голосов
/ 05 января 2010

Я думаю, что вполне возможно, что переключение на InnoDB улучшит производительность, но по моему опыту, вы не можете быть уверены, пока не попробуете. На вашем месте я бы настроил тестовую среду на том же сервере, конвертировал бы в InnoDB и запустил бенчмарк.

0 голосов
/ 02 сентября 2013

Исходя из моего опыта, таблицы MyISAM полезны только для индексирования текста, когда вам нужна хорошая производительность при поиске по крупному тексту, но вам все еще не нужна полноценная поисковая система, такая как Solr или ElasticSearch.

Если вы хотите переключиться на InnoDB, но хотите продолжать индексировать текст в таблице MyISAM, я предлагаю вам взглянуть на это: http://blog.lavoie.sl/2013/05/converting-myisam-to-innodb-keeping-fulltext.html

Также: InnoDB поддерживает оперативное атомарное резервное копирование с использованием innobackupex от Percona. Это богохульство при работе с производственными серверами.

...