Скорость
Медленный MySQL-запрос: как связать его со страницей сайта
Страница медленно работает из-за MySQL-запроса. Рассказываем, какие данные нужны разработчику и почему просто переписать самый длинный запрос недостаточно.
Что происходит и с чего начать
База данных может тратить время на поиск, сортировку, ожидание другой операции или передачу большого результата. Сначала нужно связать медленный запрос с конкретным действием сайта. Иначе можно оптимизировать редкий отчёт, который не влияет на задержку покупки. Владельцу полезно собрать адрес страницы, выбранные фильтры и время ожидания. Специалист сопоставит это с журналом запросов. Самостоятельно запускать непонятные команды изменения базы для проверки скорости не требуется: первый этап диагностики должен объяснить наблюдаемую задержку.
Что можно проверить самостоятельно
- Запишите точный адрес и параметры медленного действия. Проверьте, зависит ли ожидание от фильтра, числа товаров или времени выполнения обмена с учётной системой.
- Сравните одинаковый сценарий несколько раз, не меняя данные между попытками. Укажите, если замедление возникает только при одновременной работе менеджеров или массовом обновлении каталога.
- Попросите показать связь найденного запроса со страницей. Для обсуждения результата не нужна копия всей клиентской базы: достаточно безопасного примера и измерений без персональных данных.
Как понять результаты проверки
Специалист изучает план выполнения — способ, которым база ищет нужные строки, — и фактическое поведение на вашем объёме данных. Индекс может ускорить поиск, но занимает место и влияет на изменения записей. Также проверяют, не возвращает ли запрос намного больше данных, чем нужно странице. Решение должно сокращать ненужную работу или ожидание, а не только менять формулировку SQL. Быстрый результат на маленькой тестовой таблице не подтверждает эффект для рабочего каталога.
Что проверяет разработчик
Для этой части понадобятся доступ к настройкам, журналам ошибок или коду. Её можно передать специалисту вместе с результатами предыдущих шагов.
- Сопоставьте медленный URL и временной интервал с журналом медленных запросов или доступной диагностикой приложения.
- Посмотрите план выполнения на безопасной копии данных: используемые индексы, объём просмотренных строк, сортировку и соединения таблиц.
- Различайте долгую обработку и ожидание блокировки. Запрос с хорошим планом может стоять за незавершённой транзакцией.
На что обратить внимание
Индекс полезен только если соответствует условиям и порядку работы запроса. Большое число похожих быстрых запросов также способно замедлить страницу, хотя ни один отдельно не выглядит критическим.
Как исправляют причину
Сократите лишние выборки и возвращаемые поля, проверьте подходящий состав индекса на копии. Учитывайте стоимость записи и время изменения большой таблицы; не запускайте тяжёлый эксперимент на пике продаж.
Как убедиться, что проблема решена
Сравните план и время на данных, близких к рабочим. Убедитесь, что результаты запроса не изменились, а операции записи не получили заметного ухудшения.
После оптимизации повторите исходный сценарий и соседние фильтры. Сверьте состав результата, порядок и количество товаров, чтобы ускорение не оказалось потерей условий выборки. Если добавляли индекс, проверьте обычный обмен и запись заказов. Попросите замеры до и после с сопоставимыми данными. Приёмка должна учитывать суммарное время страницы, а не только скорость одной из её внутренних операций.