Отладка запросов: SQL Tracker
Анализ запросов к базе выполняется через режим отладки в административной панели или программно с помощью класса Bitrix\Main\Diag\SqlTracker. Трекер фиксирует полный текст запросов, время их исполнения и стек вызовов (getTrace()), позволяя локализовать проблему N+1 запросов в компонентах и медленные выборки в фоновых агентах.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Включение трекера
-
2
Анализ запросов
-
3
Поиск узких мест
Материалы
Официальная документация
-
Как оптимизировать запросы к базе данных Новая дока
Проверь себя
Заказчик жалуется, что страница раздела открывается четыре секунды. С чего начать, не открывая код?
С кнопки «Отладка» в панели администратора под админом: включить статистику SQL и включаемых областей. Под каждым компонентом появится число запросов, и виновник обычно один — компонент с сотнями запросов в цикле.
Почему кнопка «Отладка» ничего не показывает по агенту или консольной команде, и что использовать вместо неё?
Панель работает только на хите с авторизованным администратором. В CLI, агентах и AJAX-обработчиках трекер запускают из кода: Connection::startTracker(), затем getQueries() у объекта SqlTracker или startFileLog() для записи в файл.
Трекер показал 300 одинаковых запросов, но не понятно, откуда они. Как найти место в коде?
У каждого SqlTrackerQuery есть getTrace() со стеком вызовов, глубина по умолчанию 10 кадров и меняется через setDepthBackTrace(). В стеке ищут первый кадр вне ядра: обычно это result_modifier.php или обработчик события.
Разработчик оставил startFileLog() на проде «на пару дней». Что произойдёт?
Каждый запрос всех хитов с полным стеком пишется в один файл; на сайте с трафиком он вырастет до гигабайт за часы и забьёт диск. Плюс сам трекер держит все запросы хита в памяти и замедляет страницу.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить