Перейти к основному содержанию
Тест-сервис
Обсудить проект
Все материалы
Поддержка MySQL медленные запросы производительность Битрикс

Как найти тяжёлые запросы MySQL в Битрикс

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

Высокая загрузка MySQL не показывает, какой код виноват. Один запрос может выполняться секунду, другой — пять миллисекунд, но повторяться тысячи раз. Нужны частота, длительность, число просмотренных строк и контекст страницы.

Не начинайте с индексов Индекс ускоряет определённый способ чтения, но замедляет запись и занимает место. Сначала получите реальный запрос и план выполнения, затем проверяйте гипотезу на копии.

1. Зафиксируйте пользовательский симптом

Запишите URL, фильтры, пользователя, время и повторяемость. Измерьте TTFB и время компонента. Без контекста slow log превращается в длинный список, не связанный с бизнес-сценарием.

2. Включите slow query log на ограниченное окно

Официальная документация MySQL указывает, что журнал по умолчанию отключён. Порог long_query_time и минимальное число просмотренных строк подбирают под нагрузку. Журнал может быстро расти, поэтому заранее настройте путь, ротацию и время выключения.

sql
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW FULL PROCESSLIST;

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

3. Сгруппируйте похожие запросы

bash
mysqldumpslow -s t -t 20 /path/to/mysql-slow.log
mysqldumpslow -s c -t 20 /path/to/mysql-slow.log

Первый отчёт показывает дорогие по времени группы, второй — самые частые. Суммарный ущерб часто создаёт именно частая выборка внутри цикла.

4. Изучите план выполнения

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

5. Найдите PHP-источник

Ищите таблицы, поля и конструкцию запроса в пользовательском коде. В Битрикс типовые причины — запрос внутри цикла, выбор всех свойств, неоправданная сортировка, некешируемый компонент, большой offset и неправильная модель фильтра.

6. Исправьте причину и измерьте снова

  • объедините повторные выборки;
  • выбирайте только нужные поля;
  • проверьте кеш и его ключ;
  • добавляйте индекс только под доказанный запрос;
  • сравните время, rows examined и нагрузку до и после.

Официальная документация

MySQL Slow Query Log и mysqldumpslow.