В начале каждой страницы, обслуживаемой WordPress, есть вызов MySQL для получения параметров:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
Поскольку для autoload
столбца нет индекса , MySQL должен искать ВСЕ строки.
Я также натолкнулся на комментарий этого ответа, в котором говорилось, что прирост производительности не будет, даже если будет индекс.
В своем приложении я использовал много переходных значений, чтобы служить заменой сеанса. Они работали отлично, и у меня есть свои собственные процедуры сбора мусора. Я заметил, что в wp_options
таблице все переходные значения (начинающиеся с _transient_
) все имеют autoload=no
. Я ожидаю, что количество строк в моей wp_options
таблице будет увеличиваться по мере увеличения числа одновременно работающих пользователей.
Я хотел бы знать, почему стол разработан таким образом. И я должен создать индекс для моего конкретного случая?
источник
autoload
столбца.wp_options.autoload
. Источники: make.wordpress.org/core/2019/10/15/… ... и ... core.trac.wordpress.org/ticket/24044#comment:87 ... Престиж @DanBUK, который предложил эту функцию в 2013 году.Я веду 3 блога WP на большом экземпляре Debian Squeeze и выясняю, почему mysql завис на этом хосте при 200% -ной загрузке ЦП и загрузке системы между 3 и 6. Посмотрев на «show process list» внутри mysql, мы поняли Таблица wp_option была вовлечена в эту проблему, поэтому мы выполнили:
После этой операции загрузка mysql, как показано сверху, резко упала до 1%, а средняя нагрузка экземпляра теперь составляет 0.10.
Мы используем некоторые плагины, чтобы где-то в коде мог быть цикл, и это может быть конкретной ситуацией, но в нашем случае изменение производительности совершенно поразительно.
Наша таблица wp_options имеет 347 строк.
источник
select *
раз и навсегда. Вместо этого он запрашивает каждый параметр, поэтому размещение индекса будет иметь большое значение.Хотя @fuxia принял ответ затрагивает некоторые «заявленные» причины (большинство из которых были заявлены сотрудниками Automattic по различным билетам Trac и т. Д.), Основная причина того, что WordPress Core не включает в себя индекс для параметров автозагрузки в
wp_options
таблице, заключается в том, что Автоматик опасался, что это отрицательно скажется на производительности баз данных MySQL, которые все еще используют движок MyISAM.В частности, они указали на сам сайт WordPress.org, представляющий собой очень старую / сложную базу данных, в качестве примера веб-сайта, производительность которого будет ухудшена таким индексом.
Почти все другие причины, по которым индекс не добавлялся в течение последних 9 лет (да, с 2010 года в случае билета Trac # 14258 и с 2013 года в случае билета Trac # 24044 ) были неоднократно признаны неверными десятками членов Сообщество WordPress, однако сотрудники Automattic неоднократно игнорировали несколько независимых тестов производительности и возвращались к упоминанию проблем MyISAM.
К счастью, в конце 2019 года с PHP 7.2 теперь версия «по умолчанию», рекомендованная WordPress Core, и с движком InnoDB теперь по умолчанию в версиях MySQL после 5.5 , и с постоянным давлением со стороны различных разработчиков, включая @DanBUK, которые оставались в проблеме в течение многих лет Компания Automattic наконец сдалась и решила добавить индекс автозагрузки для WordPress 5.3+ в ноябре 2019 года.
Мы в LittleBizzy запустили первый известный плагин, который автоматически добавляет индекс, если он не существует, который все еще доступен на GitHub и регулярно загружается. Обратите внимание, что вам больше не нужно устанавливать такие плагины в ваш стек WordPress, если вы используете WP Core 5.3 + ...
источник