Когда настало время изменить таблицу с MyISAM на InnoDb? - PullRequest
5 голосов
/ 13 ноября 2009

Этот вопрос как продолжение моего предыдущего вопроса: Прав ли я, что InnoDb лучше для частых одновременных обновлений и вставок, чем MyISAM?

Но на этот раз у меня есть конкретные вопросы.
Мы знаем, что MyISAM быстрее, чем InnoDb, когда у нас мало одновременных обновлений (вставок). Когда у нас много одновременных обновлений, таблица MyISAM блокируется, и все остальные клиенты должны ждать.

1) Но когда пришло время перейти с MyISAM на InnoDb? 1 обновление каждую секунду? 10 обновлений каждую секунду? 100 обновлений каждую секунду?
2) Для конкретного примера, будет ли лучше перейти на InnoDb одну из таблиц на моем сайте, где у меня обычно есть несколько обновлений в минуту (из разных сеансов), но иногда это может быть ~ 2-3 обновления в секунду?

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

Я думаю, что на ваши вопросы в значительной степени ответили в предыдущем вопросе, на который вы ссылались.

1) При создании таблицы. InnoDB предоставляет больше преимуществ, чем просто блокировка на уровне строк. Лучшая скорость, когда несколько SQL-клиентов делают обновления, меньше риск потери / повреждения данных, ссылочная целостность и т. Д. При всего лишь нескольких транзакциях в секунду вы вряд ли заметите разницу в производительности, но InnoDB надежнее и лучше масштабируется.

2) Только с 2-3 TPS вы не увидите существенной разницы между InnoDB и MyISAM. Даже на полу-древнем оборудовании.

К вашему сведению, современный дисковод должен обрабатывать не менее ~ 200 транзакций обновления в секунду.

Я рекомендую вам прочитать о InnoDB , MVCC и ACID .

1 голос
/ 13 ноября 2009

Вы, вероятно, не должны менять одну таблицу за раз, если можете.

Изменить весь сервер. Таким образом, вы можете настроить свой сервер на рабочую нагрузку только для innodb, а не на myisam-workload. Эти два несовместимы (буферы памяти выделены для определенных механизмов; они не могут совместно использовать память).

Скажем, у вас есть 16 ГБ оперативной памяти, вы, вероятно, захотите использовать около 12 ГБ для пула буферов innodb, если у вас нет таблиц MyISAM.

Аналогичным образом, если у вас есть только таблицы MyISAM, вы, вероятно, захотите полностью отключить innodb и добавить немного меньше половины (скажем, 6G) в свой кэш ключей myisam.

Смешанный сервер myisam-innodb должен компенсировать настройку памяти.

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

В некоторых случаях это чрезмерное упрощение, а в других совершенно неправильно говорить: «Мы знаем, что MyISAM быстрее, чем InnoDb».

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

То есть, если ваши данные не имеют размера "тривиальная шутка".

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

...