Производительность сайта, кеш не работает должным образом

8

введите описание изображения здесь

Я использую модуль регистрации производительности . Над скриншотом, одна странная вещь, которую я заметил, это вставить Cache_bootstrap на каждую страницу. Когда вы переходите на любую страницу (как тему администратора, так и тему внешнего интерфейса), вставьте кеш, а затем удалите кеш. Это означает, что кеш устанавливается и уничтожается на каждой странице, и на самом деле кеш не создается. Как я могу уточнить это? Для диагностики этой проблемы, потому что в настоящее время я работаю над производительностью сайта.

введите описание изображения здесь

Я также использую New Relic для проверки производительности. Это также показывает, что загрузка базы данных высока.

и my.cnf информация.

введите описание изображения здесь

Мистер Дж
источник

Ответы:

8

На слайде № 85 из моей презентации производительности рассказывается о максимальном размере пакета в MySQL, вам нужно увеличить это значение; SET GLOBAL max_allowed_packet=33554432;или измените его внутри файла конфигурации https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

mikeytown2
источник
действительно полезный ответ.
Мистер Джей
3

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

  1. У вас не только записи в кеш, но и явное удаление кеша. Неудачная запись в кеш приведет только к повторным кеш-записи, а затем к кешу, но не к удалению.
  2. Это таблица cache_bootstrap. Есть несколько кешей, которые могут стать большими, но они обычно не из этого мусорного ведра.

Наиболее распространенной причиной этого шаблона являются вызовы variable_set (), которые происходят на каждой странице. Посмотрите, откуда берутся эти удаления кэша, либо с xhprof, либо с xdebug и установкой точки останова, либо добавив debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS). Я уверен, что вы увидите там вызов variable_set ().

Проблема в том, что существует единый глобальный кеш для переменных. Каждая запись в кеш приводит к удалению кеша, и следующий запрос считывает всю {variables}таблицу и записывает ее обратно в кеш.

Многие разработчики не знают об этом и делают такие вещи, как «обеспечение значений», вызывая variable_set () непосредственно в файле .module или в другом месте, которое выполняется при каждом запросе.

Berdir
источник
да .. это правда, большинство разработчиков, даже я не знаю о факте variable_set (), который вы обсуждали. а также я узнаю о debug_print_backtrace (DEBUG_BACKTRACE_NO_ARGS). Спасибо за это. :)
Mr. J
3

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

Попробуйте модуль оптимизатора Bootstrap , он поможет найти такие записи и удалить их.

Богдан Тур
источник