Описать проблему ↗

Скорость

Медленный MySQL-запрос: как связать его со страницей сайта

Страница медленно работает из-за MySQL-запроса. Рассказываем, какие данные нужны разработчику и почему просто переписать самый длинный запрос недостаточно.

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

База данных может тратить время на поиск, сортировку, ожидание другой операции или передачу большого результата. Сначала нужно связать медленный запрос с конкретным действием сайта. Иначе можно оптимизировать редкий отчёт, который не влияет на задержку покупки. Владельцу полезно собрать адрес страницы, выбранные фильтры и время ожидания. Специалист сопоставит это с журналом запросов. Самостоятельно запускать непонятные команды изменения базы для проверки скорости не требуется: первый этап диагностики должен объяснить наблюдаемую задержку.

Что можно проверить самостоятельно

  1. Запишите точный адрес и параметры медленного действия. Проверьте, зависит ли ожидание от фильтра, числа товаров или времени выполнения обмена с учётной системой.
  2. Сравните одинаковый сценарий несколько раз, не меняя данные между попытками. Укажите, если замедление возникает только при одновременной работе менеджеров или массовом обновлении каталога.
  3. Попросите показать связь найденного запроса со страницей. Для обсуждения результата не нужна копия всей клиентской базы: достаточно безопасного примера и измерений без персональных данных.

Как понять результаты проверки

Специалист изучает план выполнения — способ, которым база ищет нужные строки, — и фактическое поведение на вашем объёме данных. Индекс может ускорить поиск, но занимает место и влияет на изменения записей. Также проверяют, не возвращает ли запрос намного больше данных, чем нужно странице. Решение должно сокращать ненужную работу или ожидание, а не только менять формулировку SQL. Быстрый результат на маленькой тестовой таблице не подтверждает эффект для рабочего каталога.

Что проверяет разработчик

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

  1. Сопоставьте медленный URL и временной интервал с журналом медленных запросов или доступной диагностикой приложения.
  2. Посмотрите план выполнения на безопасной копии данных: используемые индексы, объём просмотренных строк, сортировку и соединения таблиц.
  3. Различайте долгую обработку и ожидание блокировки. Запрос с хорошим планом может стоять за незавершённой транзакцией.

На что обратить внимание

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

Как исправляют причину

Сократите лишние выборки и возвращаемые поля, проверьте подходящий состав индекса на копии. Учитывайте стоимость записи и время изменения большой таблицы; не запускайте тяжёлый эксперимент на пике продаж.

Как убедиться, что проблема решена

Сравните план и время на данных, близких к рабочим. Убедитесь, что результаты запроса не изменились, а операции записи не получили заметного ухудшения.

После оптимизации повторите исходный сценарий и соседние фильтры. Сверьте состав результата, порядок и количество товаров, чтобы ускорение не оказалось потерей условий выборки. Если добавляли индекс, проверьте обычный обмен и запись заказов. Попросите замеры до и после с сопоставимыми данными. Приёмка должна учитывать суммарное время страницы, а не только скорость одной из её внутренних операций.