Полезные приемы для поиска и исправления медленных запросов к базе данных WordPress
Опубликовано: 2019-04-17Умеренные SQL-запросы могут снизить производительность сайта разработки приложений WordPress. Время от времени умеренные запросы являются следствием неадекватно структурированного SQL, который никогда не должен был выполняться таким образом.
Более того, в некоторых случаях умеренные запросы на самом деле были быстрыми вопросами в определенный момент, но по мере того, как сайт становился все более опытным, запросы становились все медленнее и медленнее, не в силах оставаться в курсе расширяющейся базы данных.
Несмотря на то, что SQL стал умеренным, следует изучить несколько подходов к обнаружению и устранению проблемных вопросов при разработке приложений WordPress. Тут и там может потребоваться определенное веб-приложение, и у него может не хватить энергии, способностей или плана расходов для индивидуального улучшения. Создание без какой-либо подготовки может решить некоторые проблемы, но это может занять больше времени, чем начало с текущей кодовой базы. WordPress изначально был структурирован как платформа для ведения блога, и он продолжает оставаться выдающимся в этом отношении. Как бы то ни было, он превратился в полноценную систему управления контентом (CMS) и для некоторых целей даже может создать надежное веб-приложение — быстро и с существенно меньшими затратами, чем индивидуальное усовершенствование. Хотя WordPress предлагает встроенные приложения для разработки, его можно использовать для веб-приложений, чтобы сделать его более полезным. Встроенные структуры страниц и постов можно использовать для многих целей, но если вам нужна пользовательская информация и поля для включения, поиска или опроса, контроля и отображения, требуется дополнительная работа.
Поиск медленных запросов
Поиск происхождения умеренных вопросов включает два этапа:
- Выяснить, какие вопросы действительно являются умеренными.
- Определение программы, которая ими управляет.
Следует обратить внимание на два модуля и один SaaS, которые могут позволить им обнаруживать умеренные запросы.
Монитор запросов
Этот модуль можно использовать для получения информации о текущей странице. Несмотря на целый кластер данных о внутренней деятельности WordPress, он дает пошаговую разбивку:
- Сколько вопросов возникло по этому требованию?
- Какой запрос на странице занял максимальное количество времени?
- Какие возможности вложили больше всего энергии в вопросы SQL?
- Исходили ли эти запросы из модулей, тем или из центра WordPress.
Экран запроса распознает даже умеренные вопросы с раздражающим красным цветом, что упрощает выбор SQL-запроса.
Панель отладки
Еще один феноменальный инструмент для поиска крайне умеренного SQL — старый, надежный модуль Debug Bar. Панель отладки предоставляет данные о внутреннем функционировании WordPress, когда страница загружается с такими вопросами, как:
- Параметры WP_Query
- Данные запроса (с учетом согласования правил обновления)
- Запросы SQL, производимые данной страницей
Чтобы включить отслеживание SQL на панели отладки, пользователь должен разрешить SAVEQUERIES где-то на сайте — скорее всего, в wp-config.php.
Предупреждение: SAVEQUERIES влияет на выполнение на сайте и, по-видимому, не должен использоваться на сервере генерации. Тем не менее, его можно использовать на машине продвижения.
Поиск умеренного SQL не очень прост с панелью отладки. Например, он не предоставляет сортируемые таблицы или функции умеренных запросов для пользователя. Панель отладки обеспечивает возможность отслеживания, которая направляет пользователя точно в направлении происхождения вопроса.
Это краткое изложение загруженных документов и возможностей, которые приводят к выполнению запроса. Чаще всего кто-то увлекается абсолютным продолжением раздела в кратком изложении; это место, где был выполнен умеренный вопрос и где следует начать свою охоту. Удобство наличия настройки каждой емкости, которая вызывает этот вопрос, заключается в том, что она может дать представление о том, почему в любом случае был выполнен SQL.
НоваяРеликвия
NewRelic — это администрация, которая измеряет и контролирует выполнение разработки веб-приложений, включая разработку приложений WordPress. Администрация дает метрическую тонну данных об исполнении сайта. Потерять чувство направления в информации, которую NewRelic ежеминутно предоставляет пользователю для SQL-запросов, совсем не сложно.
Между NewRelic и модулями, на которые мы ссылались ранее, есть два примечательных различия:
- NewRelic дает гораздо больше информации о выполнении PHP, вплоть до точного расчета времени, затрачиваемого на каждую функцию.
- NewRelic отслеживает каждое требование к сайту с глаз долой, поэтому вы можете обратиться к нему позже, чтобы найти умеренный SQL. Модули просто дают ему текущую страницу.
Важно, что у NewRelic есть бесплатный тарифный план, который дает общие данные о работе сайта, но вам придется перейти на платный тариф для модных мелочей для проверки отдельных запросов и поиска умеренных запросов.
Понимание медленного запроса с EXPLAIN
До этого момента устройства были защищены для поиска умеренных вопросов. В настоящее время должно быть известно, почему эти расследования мешают делу.
Ключевое слово MySQL EXPLAIN может позволить, э-э, прояснить, что происходит. Добавление EXPLAIN в начало запроса показывает, как MySQL выполняет вопрос. Для запутанных запросов EXPLAIN может помочь отличить умеренные фокусы в SQL, например умеренные подзапросы или расточительные действия.
Исправление медленных запросов
Поскольку известно, что запросы умеренные, и EXPLAIN сообщила пользователю, почему это так, следует рассмотреть несколько вариантов решения этих проблем со сонливостью.
Вариант 1: Извращение вопроса
Может возникнуть вопрос, из-за которого экран редактирования сообщения работает очень медленно. Запрос был частью метабокса пользовательских полей.
Определенный кусок SQL приносит список meta_keys из таблицы ks29so_postmeta, который, по всей вероятности, не начинается со знака подчеркивания. Объяснение GROUP BY подразумевает, что каждый результат является особенным.
Запустив этот запрос несколько раз, вот сколько времени это может занять:
1,7145 сек.
1,7911 сек.
1,8076 сек.
1,7707 сек.
1,8456 с
Можно разработать запрос, который приводит к аналогичным результатам. Он должен быть выбран как единственный в своем роде meta_keys. Исключительный — это эквивалентное слово для конкретного, которое как раз и является объяснением SQL!
Вариант 2. Добавление индекса
Пока пользователь выполняет SQL-запрос к заданной таблице MySQL, ему необходимо изучить всю таблицу, чтобы понять, какие строки важны для конкретного запроса. В тот момент, когда таблица становится огромной, эта проверка начинает занимать довольно много времени.
Именно здесь появляются записи MySQL. Списки берут информацию из таблицы и упорядочивают ее таким образом, что поиск информации становится намного менее сложным. Сортируя информацию определенным образом, файлы помогают уменьшить степень фильтрации, которую MySQL выполняет для каждого запроса.
Файлы можно добавлять в отдельные сегменты или в различные разделы.
С файлом на meta_key самое первое время вопроса SQL несколько напоминает это:
0,0041 сек.
0,0023 сек.
0,0030 сек.
0,0025 сек.
0,0019 сек.
Это очень умно.
Выражение предупреждения о файлах: каждый раз, когда INSERT создает столбец или используется UPDATE для таблицы af, список переопределяется, что может быть дорогостоящим действием. Записи ускоряют просмотр таблицы, но запись в нее происходит медленнее. Хотя правильно размещенный индексный список может работать очень хорошо, не следует зацикливаться на нем, не проверив общее влияние списка на базу данных.
Вариант 3. Кэширование результатов запроса
После того, как понял, что есть умеренный вопрос. Вместо того, чтобы изменить вопрос, может быть сценарий, в котором он просто устраняет последствия расследования. Таким образом, можно было бы ограничить частоту проведения опроса, и он чаще получал бы «бесплатный пропуск».
WordPress Transients API — это один из способов резервирования запросов. Переходные процессы используются для устранения последствий дорогостоящих задач, например,
- Запросы к внешним сайтам (например, получение текущих сообщений в Facebook)
- Медленные куски обработки (например, поиск огромных струн с обычной артикуляцией)
- Медленные запросы к базе данных!
Выбор подхода
Есть ряд альтернатив, которые были изложены, и, скорее всего, существует семнадцать различных подходов к пониманию этого умеренного исследования. Какой подход следует выбрать?
Вариант 1 (изменение вопроса) дал блестящие результаты. Однако следует учитывать возможность того, что модифицированный запрос обычно не дает аналогичных результатов. Можно было бы невольно испортить код несколько неправильным вопросом.
Вариант 2 (включая запись) не всегда возможен в зависимости от таблицы и разделов, используемых запросом. Из-за таблиц центра разработки приложений WordPress нужно было бы подчеркнуть другие эффекты записей:
- Ожидает ли процедура обновления центра дополнительные списки?
- Будет ли включение файла модерировать различные запросы, подобные INSERT и UPDATE?
Вариант 3 (резервирование результатов с помощью бездомных) имеет незначительный эффект — пользователю не нужно менять первый запрос и нет необходимости настраивать структуру базы данных.
Обычно люди выбирают вариант 3. В конкретном случае он может выбрать другой вариант, полагаясь на вопрос, который он решает, или на конкретном сайте, имеющем проблемы с SQL. Конечно, не существует универсального ответа на большинство проблем с выполнением, поэтому одному разрешено не соглашаться с решением другого — или пробовать каждый из трех без промедления!
Оставаться в курсе
Он набросал подлинную проблему здесь. Поле «Пользовательские поля» в CSS-Tricks действительно было нарушением некоторых чрезвычайно умеренных запросов к базе данных. Он также наметил различные пути к возможным договоренностям.
Появление совершенно новых идей
Существуют различные методологии, которые можно использовать, чтобы попытаться ускорить выполнение вопросов, которые требуют больше работы, чем просто настройка запроса или включение списка. Одной из самых медленных частей вопроса является работа, выполняемая для объединения таблиц для перехода от идентификатора клиента к идентификатору элемента, и это необходимо делать для каждого клиента.
Можно денормализовать информацию, создав таблицу, в которой хранится информация о разрешениях, наряду с идентификатором клиента и идентификатором элемента для всех лицензий, и просто запросив их для конкретного клиента. Нужно будет изменить таблицу, используя триггеры MySQL на INSERT/UPDATE/DELETE в таблице лицензий (или других, в зависимости от того, как информация может измениться), однако это значительно улучшит выполнение опроса этой информации.
Таким образом, если различные соединения смягчают вопрос в MySQL, может быть быстрее разбить запрос как минимум на две артикуляции и выполнить их независимо в PHP, а затем собрать и направить результаты в код.