База данных Wordpress Медленная - я должен переключиться на InnoDB?

12

У меня есть сайт WordPress с более чем 10 тысячами сообщений, и все становится очень медленным, когда я добавляю и редактирую сообщения. Страницы загружаются хорошо и быстро для пользователей, наряду со списками сообщений администратора, но когда происходит запись или обновление, сервер переходит на 100% ЦП и занимает много времени (иногда дольше, чем время ожидания PHP 60 с).

Я думаю, что это, вероятно, связано с блокировкой на уровне таблицы MyISAM, и я думаю о переключении на InnoDB. Каковы последствия этого?

Некоторые характеристики:

select  - per hour ~22k
update  - per hour ~7.6k
set option  - per hour ~7k

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

Спасибо

Редактировать : я обнаружил одну из основных проблем, вызывающих медлительность, это был YARPP (еще один плагин связанных сообщений), который каждый раз восстанавливал «родство», и это, похоже, было связано с тегами 2k +, которые у нас есть. Я отключил опцию «рассмотреть теги», и она значительно ускорилась.

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

Итак, моя немедленная проблема решена, хотя я все равно хотел бы услышать хороший ответ на InnoDB против MyISAM для Wordpress!

Адам Хит
источник

Ответы:

11

Я бы действительно переключился на InnoDB. Таблица блокировки / блокировки строк давно обсуждается многими. Я бы всегда выбирал InnoDB руками. Однако есть и другая серьезная причина выбрать InnoDB ... CACHING .

Хотя большинство людей хвастаются тем, что MyISAM быстрее для чтения, большинство людей забывают, что многопользовательский кеш для MyISAM, который называется кешем ключей (устанавливается key_buffer_size), кэширует только страницы индекса из файлов .MYI. Он никогда не кэширует страницы данных. Он имеет официальный максимум 4 ГБ в 32-битных системах. 8 ГБ - лучший максимум для 64-разрядных.

InnoDB Buffer Pool кэширует данные и страницы индекса. В зависимости от вашего сервера, вы можете кэшировать до всего набора данных в оперативной памяти. Вы можете настроить InnoDB для оперативной памяти до 80% и 10% для подключений к БД, и оставить 10% для ОС. Это верно даже для разных операционных систем .

Я рекомендовал эти вещи для клиентов Drupal с удивительным успехом. Это относится и к Wordpress . Я обеспечил поддержку БД для клиентов с WordPress. Те же улучшения.

Вы всегда можете настроить память для InnoDB более эффективно, чем больше MyISAM. Всегда есть способ настроить InnoDB в соответствии с вашими требованиями к производительности . По мере роста ваших данных это в конечном итоге станет требованием .

RolandoMySQLDBA
источник
6

InnoDB, вероятно, вам не поможет - блокировка на уровне страниц / строк помогает уменьшить конфликты, но не похоже, что это ваша проблема.

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

Перед переключением, вы должны по крайней мере сделать следующее

  • запустите mysqltuner, который даст вам несколько советов по настройке (хотя это не безошибочно или все знают)
  • включите медленное ведение журнала запросов, оставьте его на день или около того, а затем начните просеивать журнал и ОБЪЯСНЯТЬ запросы, чтобы увидеть, что происходит

Исходя из личного опыта, я обнаружил, что добавление индекса к неиндексированному полю на wp_comments очень помогло в моей конкретной ситуации (периоды бурного комментирования, когда около 10 человек могут пытаться комментировать одновременно), и возможно, что выяснение этого какие запросы выполняются медленно и почему они могут помочь вам лучше понять проблему и получить РЕАЛЬНОЕ решение!

ана
источник