InnoDB для таблиц вместо myISAM

Главные вкладки

Аватар пользователя Тыдж Тыдж 8 ноября 2009 в 14:49

Читал что ISAM быстрее InnoDB, но в последнем используется механизм транзакций, то есть при работе с базой блокируется не вся таблица (как в myisam) а только нужная строка, поэтому возможны параллельный обращения и это очень выгодно для таблиц к записям которых обращаются очень часто.

Хочу услышать советы, на примере обычного новостного сайта или блога - 1-2 редактора и комментирующие пользователи:
-стоит ли перевести некоторые таблицы в InnoDB для оптимизации?
-какие именно таблицы нужно менять (где часто происходит выборка, удаление, апдейты и т.д.)?
-есть ли смысл при небольшой нагруженности сайта? отсюда же следует еще один - после какого порога посетителей использование innoDB будет оправданным? ведь при паралельном использовании, я думаю, помимо скорости таки должна увеличиться и нагрузка...

еще где-то видел фразу что нужно переводить таблицы, которые используют "Накладные расходы" - не очень понимаю что это такое, и правда ли это?

Комментарии

Аватар пользователя Тыдж Тыдж 8 ноября 2009 в 15:27

я пока и нагруженности не испытываю... сайта еще нет.
я на будущее - люблю делать наверняка, да и знания пригодятся. давайте не будет переводить тему во флейм

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 8 ноября 2009 в 15:34

-стоит ли перевести некоторые таблицы в InnoDB для оптимизации?
Стоит

-какие именно таблицы нужно менять (где часто происходит выборка, удаление, апдейты и т.д.)?
Таблицы модуля статистики, КЕШевые таблицы, session. Зависит от вашей конфигурации модулей.

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

Аватар пользователя Demimurych Demimurych 8 ноября 2009 в 15:34

В общем случае использование InnoDB выгоднее там, где происходит интенсивное обновление таблиц.

найдите как в вашем инструменте для работы с БД смотреть статистику блокировок таблиц.
В mysql это можно сделать следующей командой

SHOW STATUS LIKE 'Table%'

в выводе вы увидите Table_locks_immediate - в скольких случаях блокировка была получена немедленно
и
Table_locks_waited - когда сервер ожидал прежде чем выдать блокировку.

где то ходил скрипт, который для тех кто не хочет вникать в детали - подсказывал стоит или не стоит думать о смене типа. кажется tune_mysql назывался или как то так.

В наших проектах мы ВСЕГДА ставим innodDb на таблицы session и watchdog
при активном комьюнити еще и на users
и если вы используете друпал-модули статистики то и на их таблицы так же.

В остальных случаях, мы собираем статистику обновлений БД и уже принимаем решение.
Часто, comments, node, term_node постигает та же участь.

Аватар пользователя Тыдж Тыдж 8 ноября 2009 в 17:57

Table_locks_immediate и Table_locks_waited показывает и в самом друпале.
скажите, как можно просмотреть, каким именно таблицам пришлось ожидать прежде чем принять блокировку?
или как вывести информацию по отдельным таблицам, сколько было блокировок и сколько пришлось ожидать.
так же интересно, статистика по lock immediate и waited за какой промежуток времени выводится в друпале?

нашел полезные тесты для оптимизации базы данных: http://www.day32.com/MySQL/ и прошу прощения, если ответы на мои вопросы будут в результатах последних, я еще не проверял..
Demimurych скрипт случайно не на Perl, помните?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 8 ноября 2009 в 18:34

mysql tuner называется, на perl. http://mysqltuner.pl/mysqltuner.pl
Те, переменные которые показывает друпал, могут быть не совсем верные, например на хостинге hc.ru эти переменные показывали среднюю температуру по больнице, а не конкретно по БД. Так что всё зависит от настроек хостера

Аватар пользователя Тыдж Тыдж 8 ноября 2009 в 22:54

запустил мускультюнер еле запустил, доселе не знал что такое перл... на денвере не хотел запускаться как не шаманил, на хостинге через ssh пошло... толком ничего не дало, везде ОК или восклицалки, рекомендует в основном оптимизировать кеш и другие настройки...

но все же хочется узнать, как самому проследить какие таблицы блокируются сразу и становятся в очередь, как это сделать, кто поможет?

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 9 ноября 2009 в 0:18

"RxB" wrote:
Таблицы модуля статистики, КЕШевые таблицы, session. Зависит от вашей конфигурации модулей.

кэшак как раз и не стоит. а вот сессии это да. они первые грохаются

Аватар пользователя Тыдж Тыдж 9 ноября 2009 в 1:43

на д.орге пишут что сессии сильно тормозят на innodb + тормозит при count и limit а еще, не будет проблем с базой при работе в миксе? иино+исам, как насчет бекапов?
вообще как почитал кажись у innodb минусов гораздо больше чем плюсов

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 11 ноября 2010 в 8:24

"Тыдж" wrote:

на д.орге пишут что сессии сильно тормозят на innodb + тормозит при count и limit а еще, не будет проблем с базой при работе в миксе? иино+исам, как насчет бекапов?
вообще как почитал кажись у innodb минусов гораздо больше чем плюсов

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