-15%Скидка 15% на разработку сайта или магазина при старте до конца месяца
Аудит

Аудит медленных SQL-запросов на 1С-Битрикс

Находим самые дорогие SQL-запросы вашего проекта на 1С-Битрикс: разбираем slow query log и EXPLAIN-планы, выявляем отсутствующие и неэффективные индексы, тяжёлые выборки инфоблоков, N+1 и блокировки. На выходе — список запросов от худшего к лучшему с конкретными рекомендациями по оптимизации.

TOP-30самых дорогих запросов в отчёте
EXPLAINразбор плана каждого запроса
от 3 днейдо готового отчёта
10 летна нагруженных проектах Битрикс
SELECT slow query log 4.7s ADD INDEX 0.02s
Что проверяем

Что входит в аудит медленных SQL-запросов

Разбираем базу проекта по фактам: журнал запросов, планы выполнения, индексы, выборки инфоблоков, блокировки и настройки сервера баз данных.

Анализ slow query log

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

Разбор EXPLAIN-планов

Смотрим план каждого тяжёлого запроса: индекс, число строк, полное сканирование и сортировки.

Индексы и их эффективность

Находим отсутствующие, неиспользуемые и неподходящие индексы и предлагаем правильные.

Тяжёлые выборки инфоблоков

Разбираем фильтры по свойствам, сортировки и выборку лишних полей в каталоге и списках.

Поиск N+1 и дублей

Выявляем запросы в цикле и повторяющиеся выборки, которые незаметно множат нагрузку.

Блокировки и настройки InnoDB

Находим взаимные ожидания и проверяем параметры буферного пула под объём вашей базы.

Подробно об услуге

Аудит медленных SQL-запросов: что это и зачем он нужен

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

В отличие от поверхностного осмотра, когда подрядчик просто советует «добавить кэширование» или «обновить железо», аудит SQL опирается на измеримые данные. Мы смотрим, сколько раз запрос выполнился, сколько строк он прочитал, использовал ли индекс или прошёл по всей таблице, не сортировал ли результат на диске и не блокировал ли другие запросы. На этой основе видно, какой именно запрос виноват в тормозах, во сколько раз его можно ускорить и что для этого нужно сделать — добавить индекс, переписать выборку, изменить логику инфоблока или настроить InnoDB.

Какие проблемы базы мы находим

Большинство проблем производительности на Битрикс сводится к нескольким повторяющимся причинам. Чаще всего это отсутствующие индексы — когда запрос вынужден перебирать всю таблицу, потому что по нужному полю нет индекса. Дальше идут неэффективные индексы, которые есть, но не подходят под фактические условия выборки, и потому не используются. Отдельная большая тема — тяжёлые выборки инфоблоков: фильтрация по свойствам, сортировка по произвольным полям и выборка без ограничения объёма данных. И почти на каждом проекте встречается проблема N+1, когда вместо одного запроса в цикле выполняются сотни одинаковых.

Главные находки, которые попадают в отчёт по аудиту:

  • запросы без индексов, идущие полным перебором таблицы вместо точечного поиска;
  • неэффективные и неиспользуемые индексы, которые не подходят под реальные условия выборки;
  • тяжёлые выборки инфоблоков: фильтрация по свойствам, сортировка и выборка лишних полей;
  • проблема N+1, когда вместо одного запроса в цикле выполняются десятки и сотни;
  • сортировки и группировки, которые выполняются на диске из-за нехватки буферов;
  • блокировки и взаимные ожидания запросов, дающие зависания под нагрузкой;
  • неоптимальные настройки InnoDB и буферного пула, не соответствующие объёму базы.

Чем slow query log и EXPLAIN полезнее интуиции

Сердце аудита — два инструмента. Журнал медленных запросов фиксирует все запросы, которые выполнялись дольше заданного порога, и показывает реальную картину: какие именно выборки тормозят в боевых условиях, как часто они повторяются и сколько строк прочитывают. Это снимает споры о том, что виновато: вместо предположений мы видим конкретные запросы с цифрами. Команда EXPLAIN раскрывает план выполнения каждого запроса — она показывает, по какому индексу идёт поиск, сколько строк база рассчитывает прочитать и где она вынуждена сканировать таблицу целиком. По плану сразу понятно, чего не хватает запросу, чтобы стать быстрым.

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

Что вы получаете на выходе

Результат аудита — это структурированный отчёт, а не набор общих советов. В нём перечень самых дорогих запросов от худшего к лучшему, для каждого приведён текст запроса, его план выполнения, причина медленной работы и конкретная рекомендация: какой индекс добавить, как переписать выборку инфоблока, где убрать N+1, какие параметры InnoDB поднять. К каждому пункту мы указываем ожидаемый эффект и сложность внедрения, чтобы вы могли сами расставить приоритеты или поручить нам внедрение. Отчёт написан так, чтобы его понял и руководитель, и разработчик: бизнес видит, что и насколько ускорится, а команда получает готовый план действий.

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

Как это работает

Путь от медленного запроса к рекомендации

Запрос попадает в журнал медленных запросов, мы разбираем его план через EXPLAIN, находим причину и формулируем конкретную рекомендацию по ускорению.

Slow logжурнал запросов EXPLAINразбор плана Причинанет индекса · N+1 Рекомендацияиндекс · правка Каждый дорогой запрос проходит весь путь — от факта в журнале до готового решения
Журнал запросов → разбор плана EXPLAIN → причина → рекомендация по оптимизации.
Как идёт работа

Как мы проводим аудит запросов

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

01

Сбор данных

Включаем журнал медленных запросов и снимаем статистику за период с реальной нагрузкой, не трогая работу сайта.

02

Поиск самых дорогих

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

03

Разбор планов

Для каждого тяжёлого запроса смотрим EXPLAIN: индекс, число строк, полное сканирование, сортировки и блокировки.

04

Поиск причины

Определяем корень проблемы: отсутствие индекса, неэффективная выборка инфоблока, N+1 или настройки InnoDB.

05

Рекомендации и эффект

К каждому запросу даём конкретное решение, ожидаемый выигрыш по скорости и сложность внедрения.

06

Отчёт и разбор

Передаём письменный отчёт и проходим его с вашей командой, отвечаем на вопросы и помогаем спланировать внедрение.

Сравнение

Аудит SQL: своими силами, фрилансер или студия

Критерий Своими силамиФрилансерСтудия B2Bsite
Сбор и анализ slow query log Смотрят журнал, но без приоритизации по стоимостиЧасто чинит один запрос, который назвалиПолный slow log и список от худшего к лучшему
Разбор EXPLAIN-планов EXPLAIN читают частично, без выводов по индексамEXPLAIN разбирает выборочноEXPLAIN каждого тяжёлого запроса с выводами
Приоритизация оптимизации Правят то, что заметнее, а не самое дорогоеБьёт по симптому, не по корню проблемыОптимизируем по совокупной стоимости запроса
Компетенции по базе данных Знают свой код, но не глубину MySQLКомпетенции зависят от конкретного человекаГлубокая экспертиза по MySQL и Битрикс
Формат результата Риск добавить лишний индекс и замедлить записьОтчёт обычно устный или без приоритетовПисьменный отчёт с эффектом и приоритетами
Сроки

Сколько занимает аудит

1 день Доступы и настройка журнала медленных запросов
1
1–3 дня Сбор статистики под реальной нагрузкой
2
2–3 дня Разбор планов и поиск причин по каждому запросу
3
1–2 дня Подготовка отчёта со списком и рекомендациями
4
1 день Разбор отчёта с командой и план внедрения
5
Стоимость

Сколько стоит аудит медленных SQL-запросов

Стоимость зависит от объёма базы, числа запросов и глубины разбора. Ниже — ориентиры; точную смету присылаем после короткого брифа, бесплатно.

Экспресс-аудит
от 25 000 ₽
Срок: от 3 дней

Быстрый разбор TOP-10 самых дорогих запросов проекта.

  • Анализ slow query log
  • TOP-10 запросов по стоимости
  • EXPLAIN ключевых запросов
  • Короткий отчёт с рекомендациями
Популярный выбор
Полный аудит SQL
от 55 000 ₽
Срок: от 5 дней

Глубокий разбор базы со списком запросов и причинами.

  • TOP-30 запросов от худшего к лучшему
  • EXPLAIN каждого тяжёлого запроса
  • Разбор индексов и выборок инфоблоков
  • Поиск N+1 и блокировок
  • Проверка настроек InnoDB
  • Письменный отчёт и разбор с командой
Аудит и оптимизация
от 110 000 ₽
Срок: от 10 дней

Аудит плюс внедрение исправлений с замером эффекта.

  • Всё из «Полный аудит SQL»
  • Внедрение индексов и правок
  • Переписывание тяжёлых выборок
  • Настройка параметров InnoDB
  • Контрольный замер скорости до и после
Экспресс-аудит от 25 000 ₽
Срок: от 3 дней

Быстрый разбор TOP-10 самых дорогих запросов проекта.

  • Анализ slow query log
  • TOP-10 запросов по стоимости
  • EXPLAIN ключевых запросов
  • Короткий отчёт с рекомендациями
Популярный Полный аудит SQL от 55 000 ₽
Срок: от 5 дней

Глубокий разбор базы со списком запросов и причинами.

  • TOP-30 запросов от худшего к лучшему
  • EXPLAIN каждого тяжёлого запроса
  • Разбор индексов и выборок инфоблоков
  • Поиск N+1 и блокировок
  • Проверка настроек InnoDB
  • Письменный отчёт и разбор с командой
Аудит и оптимизация от 110 000 ₽
Срок: от 10 дней

Аудит плюс внедрение исправлений с замером эффекта.

  • Всё из «Полный аудит SQL»
  • Внедрение индексов и правок
  • Переписывание тяжёлых выборок
  • Настройка параметров InnoDB
  • Контрольный замер скорости до и после

Дополнительные опции

Повторный замер скорости после внедрения от 15 000 ₽
Настройка постоянного мониторинга медленных запросов от 20 000 ₽
Оптимизация конкретного раздела или компонента от 30 000 ₽
Расчёт выгоды

Сколько теряет бизнес на медленной базе

Прикиньте, во сколько обходятся тормоза каталога: медленные страницы снижают конверсию и отпугивают часть посетителей. Ускорение базы возвращает эти продажи.

Потери в месяц из-за медленной базы 0 ₽

Оценка по формуле: посетители × доля ухода в процентах × доход с посетителя. Это ориентир потерь, которые возвращает ускорение базы, а не гарантия.

Умный расчёт

Подберём формат аудита под ваш проект

Ответьте на несколько вопросов о проекте и нагрузке — предложим подходящий формат аудита запросов и пришлём ориентир по стоимости и срокам.

Вопрос 1
Загрузка вопроса…

Примеры работ

Кейсы аудита запросов

Интернет-магазин

Каталог на 120 тысяч товаров ускорен в разы

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

−85%Время фильтра
−40%Нагрузка MySQL
5 днейСрок
B2B-портал

Устранён N+1 в кабинете контрагента

Вместо сотен запросов в цикле сделали одну выборку — страница кабинета стала открываться без задержки.

−92%Запросов на страницу
−70%Время загрузки
6 днейСрок
Медиапортал

Сортировки убраны с диска в память

Перенесли тяжёлые сортировки с диска в буферы и подняли параметры InnoDB под объём базы.

−78%Медленных запросов
−35%Пиковая нагрузка
7 днейСрок
Отзывы клиентов

Что говорят о нашем аудите

«Думали, что нужен новый сервер. Оказалось, виноваты три запроса без индексов. После их правки каталог стал летать без замены железа.»

Дмитрий Технический директор, интернет-магазин

«Получили понятный отчёт со списком запросов от худшего к лучшему. Наша команда внедрила рекомендации сама за пару дней.»

Анна Руководитель проекта, B2B-портал

«Ребята показали проблему N+1, о которой мы не подозревали. Кабинет клиента открывался десять секунд, стало меньше секунды.»

Сергей Владелец, оптовая компания

«Ценно, что каждый пункт отчёта с цифрами и приоритетом. Сразу понятно, что чинить в первую очередь, а что подождёт.»

Игорь Ведущий разработчик, медиапортал
Почему мы

На что можно рассчитывать по договору

Работаем по фактам

Опираемся на журнал запросов и планы выполнения, а не на догадки о причинах тормозов.

Приоритет по стоимости

Сначала чиним то, что создаёт максимум нагрузки, а не то, что заметнее на глаз.

Без вреда боевому сайту

Сбор данных не нагружает сайт, изменения вносим обдуманно и с замером эффекта.

Понятный отчёт

Письменный документ, который понятен и руководителю, и разработчику, с ясными приоритетами.

База знаний

Частые вопросы о медленных запросах — и наш ответ

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

Индексы

Добавили индексы наугад, но скорость не выросла

Наш ответ

Индекс помогает только если он подходит под фактические условия выборки и сортировки. Лишние индексы не ускоряют чтение, зато замедляют запись и раздувают базу. Мы по плану EXPLAIN определяем, какой именно индекс нужен запросу, а какие можно убрать.

Инфоблоки

Каталог тормозит при фильтрации по свойствам

Наш ответ

Фильтр по свойствам инфоблока часто превращается в тяжёлую выборку без подходящего индекса. Решается составным индексом, правкой логики выборки или переходом на оптимальное хранение свойств. Конкретный путь подбираем по плану запроса и объёму каталога.

N+1

Страница делает сотни одинаковых запросов

Наш ответ

Это классический N+1: вместо одной выборки данные тянутся в цикле по одному. На глаз он незаметен, но под нагрузкой множит число запросов. Мы находим такие места и заменяем цикл на один запрос или предзагрузку данных.

InnoDB

Сервер мощный, но MySQL всё равно нагружен

Наш ответ

Часто дело в настройках: буферный пул меньше объёма горячих данных, сортировки уходят на диск. Мы проверяем параметры InnoDB под фактический объём базы и характер нагрузки и приводим их в соответствие, чтобы железо использовалось полностью.

Экспертный взгляд

Почему сайт тормозит из-за базы и что с этим делать

Когда проект на 1С-Битрикс начинает тормозить, первая мысль обычно одна: пора менять сервер. Иногда так и есть, но в большинстве случаев замена железа лишь маскирует проблему на время, пока база снова не упрётся в тот же самый медленный запрос. Дело в том, что мощность сервера решает не всё: если запрос перебирает миллион строк вместо тысячи, более быстрый процессор просто переберёт этот миллион чуть быстрее, а не решит, почему перебор вообще происходит. Настоящий выигрыш даёт не апгрейд, а устранение причины — и аудит медленных SQL-запросов как раз про поиск этой причины.

Почему именно база чаще всего виновата в тормозах

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

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

Что показывает slow query log и почему ему стоит доверять

Журнал медленных запросов — это запись всех обращений к базе, которые выполнялись дольше заданного порога. Он фиксирует не теоретическую, а фактическую картину: какие выборки реально тормозили в боевых условиях, как часто они повторялись и сколько строк прочитывали. Это объективный источник, который не зависит от мнений. Когда мы говорим, что виноват конкретный запрос, за этим стоят цифры из журнала, а не предположение. Такой подход экономит время и деньги: вместо того чтобы наугад оптимизировать всё подряд, мы бьём точно в то, что создаёт нагрузку.

Из журнала мы вытаскиваем не просто самые долгие запросы, а самые дорогие по совокупности. Запрос на полсекунды, который выполняется раз в час, почти не влияет на сайт. А запрос на сорок миллисекунд, который вызывается тысячу раз на каждой странице каталога, создаёт колоссальную суммарную нагрузку. Поэтому в отчёте список упорядочен по произведению длительности на частоту — так оптимизация даёт наибольший эффект на единицу усилий. Этот же принцип лежит в основе более широкого аудита производительности, где база рассматривается вместе с кодом и инфраструктурой.

Как EXPLAIN раскрывает, почему запрос медленный

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

Чаще всего решение — это правильный индекс. Но не любой: лишние индексы не ускоряют чтение, зато замедляют вставку и обновление данных и раздувают базу. Поэтому мы не добавляем индексы наугад, а подбираем именно тот, что закрывает условия выборки и сортировки конкретного запроса, и заодно отмечаем индексы, которые ничего не дают и их можно убрать. Иногда индекс не нужен вовсе, а нужно переписать саму выборку — убрать лишние поля, ограничить объём данных, разбить один сложный запрос на несколько простых.

Тяжёлые инфоблоки и проблема N+1

Отдельная большая тема на Битрикс — выборки инфоблоков. Фильтрация по свойствам, сортировка по произвольным полям, выборка всех свойств там, где нужны два, — всё это превращается в тяжёлые запросы по мере роста каталога. Часто проблему усугубляет режим хранения свойств и отсутствие подходящих индексов под фактические фильтры. Мы разбираем, как именно строятся выборки в вашем каталоге и списках, и предлагаем точечные правки: составной индекс под популярный фильтр, ограничение выбираемых полей, оптимизацию хранения свойств. Если каталог большой и тормозит именно он, эта работа смыкается с аудитом интернет-магазина, где скорость каталога рассматривается в связке с бизнес-логикой.

Вторая частая беда — проблема N+1. Это когда вместо одного запроса, который вернул бы все нужные данные сразу, код в цикле делает по запросу на каждую запись. Один такой цикл может породить сотни запросов на одной странице. На глаз это незаметно: каждый запрос быстрый, ошибки нет. Но под нагрузкой сотни мелких запросов забивают базу не хуже одного тяжёлого. Мы находим такие места в журнале по характерной картине одинаковых повторяющихся запросов и заменяем цикл на единую выборку или предзагрузку данных. Эффект обычно драматический: страница, которая делала триста запросов, начинает делать пять.

Блокировки, сортировки на диске и настройки InnoDB

Когда запросы конкурируют за одни и те же данные, возникают блокировки: один запрос ждёт, пока другой освободит строку или таблицу. Под нагрузкой это даёт характерные зависания, когда сайт замирает на несколько секунд, а потом отпускает. Такие ситуации видны в статистике, и мы разбираем, какие запросы и в каком порядке создают взаимные ожидания, чтобы развести их по времени или переписать. Сюда же относятся сортировки и группировки, которые из-за нехватки буферов выполняются на диске вместо памяти — это всегда медленно и хорошо лечится настройкой.

Наконец, мы проверяем параметры самого сервера баз данных. Очень часто на мощном железе MySQL настроен по умолчанию: буферный пул InnoDB меньше объёма горячих данных, из-за чего база постоянно читает с диска вместо памяти. Мы приводим параметры в соответствие фактическому объёму базы и характеру нагрузки. Эта работа тесно связана с аудитом серверной инфраструктуры: иногда узкое место не в самих запросах, а в том, что серверу банально не дали достаточно ресурсов под базу или настроили их неверно.

Почему апгрейд железа не заменяет аудит

Соблазн решить тормоза покупкой более мощного сервера понятен: это быстро и не требует разбираться в коде. Но это лечение симптома. Запрос без индекса останется без индекса, N+1 останется N+1, и по мере роста проекта вы снова упрётесь в потолок, только теперь на более дорогом железе. Мы регулярно видим проекты, где замена сервера дала кратковременное облегчение, а через полгода всё вернулось. Аудит запросов решает проблему в корне: после устранения тяжёлых запросов тот же самый сервер начинает держать кратно больше нагрузки, потому что перестаёт тратить ресурсы впустую.

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

Что вы получаете и как это внедрять

Итог аудита — письменный отчёт со списком запросов от худшего к лучшему. По каждому запросу в нём текст запроса, его план выполнения, причина медленной работы, конкретная рекомендация, ожидаемый эффект и сложность внедрения. Это не абстрактные советы, а готовый план действий, по которому может работать ваша команда. Многие клиенты внедряют рекомендации сами — отчёт написан достаточно подробно для этого. Если же команда загружена или правки требуют глубокой экспертизы, мы внедряем их сами: добавляем индексы, переписываем выборки, убираем N+1, настраиваем InnoDB и делаем контрольный замер скорости до и после.

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

Как растёт нагрузка по мере развития проекта

Медленные запросы редко появляются на пустом месте — они вырастают вместе с проектом. Каталог, который год назад держал тысячу товаров, теперь держит сто тысяч, и выборка, которая раньше укладывалась в миллисекунды, начала задумываться на секунды. Число заказов и история взаиморасчётов копятся, таблицы пухнут, а запросы, написанные под маленькие объёмы, перестают масштабироваться. Часто проблема не в том, что код стал хуже, а в том, что данные переросли заложенные в него допущения. Поэтому аудит полезен не только когда сайт уже тормозит, но и как профилактика на растущем проекте: мы заранее находим запросы, которые скоро станут узким местом, и подкладываем под них правильные индексы до того, как они дадут о себе знать падением скорости.

Отдельно важно следить за базой после крупных доработок и интеграций. Новый компонент, обмен с внешней системой, дополнительный фильтр в каталоге — любая из этих вещей способна добавить тяжёлую выборку, которая на тестовом объёме данных была незаметна, а на боевом проявилась под нагрузкой. Мы регулярно видим, как аккуратный сам по себе функционал создаёт N+1 или выборку без индекса просто потому, что разработчик не видел всей картины запросов на странице. Аудит после внедрения новой функциональности снимает этот риск: мы проверяем, что свежий код не утяжелил базу, и при необходимости сразу даём правки, пока проблема не разрослась и не начала влиять на продажи.

Когда стоит заказывать аудит запросов

Самый явный сигнал — сайт стал ощутимо медленнее без роста трафика или начал зависать под нагрузкой, которую раньше держал спокойно. Сюда же относятся жалобы на долгую загрузку каталога и фильтров, тормоза в личном кабинете и админке, высокая постоянная нагрузка на MySQL при умеренном трафике. Хороший повод — подготовка к сезонному пику или рекламной кампании: лучше найти и убрать узкие места заранее, чем ловить падения в самый прибыльный день. И конечно, аудит уместен перед решением о покупке более мощного сервера — чтобы убедиться, что деньги пойдут на реальную потребность, а не на маскировку медленных запросов.

Если вы не уверены, в базе ли проблема, начните с разговора и короткого экспресс-разбора. Мы посмотрим журнал медленных запросов и общую картину нагрузки и прямо скажем, где узкое место: в запросах, в коде или в инфраструктуре. По итогам вы получите честную приоритизацию — что чинить в первую очередь, какой эффект это даст и стоит ли вообще трогать железо. Обсудим ваш проект и превратим тормозящую базу в предсказуемый и быстрый фундамент сайта.

Вопросы и ответы

Частые вопросы об аудите медленных SQL-запросов

Что такое медленный SQL-запрос простыми словами? +

Это обращение сайта к базе данных, которое выполняется слишком долго — дольше, чем нужно для комфортной работы страницы. Например, запрос перебирает всю таблицу товаров вместо точечного поиска по индексу. Один такой запрос в горячем месте кода способен замедлить всю страницу, а под нагрузкой выстроить очередь и положить сайт.

Что такое slow query log? +

Это журнал медленных запросов — встроенный механизм MySQL, который записывает все обращения к базе, выполнявшиеся дольше заданного порога. Журнал показывает фактическую картину: какие выборки реально тормозили, как часто повторялись и сколько строк прочитывали. Это объективный источник данных для аудита, а не предположения.

Что показывает команда EXPLAIN? +

EXPLAIN раскрывает план выполнения запроса — то, что база собирается с ним делать: по какому индексу искать, сколько строк прочитать, нужно ли сканировать таблицу целиком и сортировать результат на диске. По плану сразу понятно, почему запрос медленный и чего ему не хватает для скорости.

Что такое индекс в базе данных? +

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

Чем аудит запросов отличается от общего аудита производительности? +

Аудит запросов прицельно отвечает на вопрос, почему тормозит именно база, и разбирает конкретные SQL-выборки. Общий аудит производительности шире: он смотрит на код, кэширование, инфраструктуру и сервер в целом. Аудит запросов часто становится глубокой частью большого аудита, когда понятно, что узкое место в базе.

Почему добавление индексов наугад не помогает? +

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

Что такое неэффективный или неиспользуемый индекс? +

Это индекс, который есть в таблице, но не подходит под реальные условия выборки, поэтому база его не использует и всё равно перебирает данные. Такие индексы только занимают место и замедляют запись, не давая выигрыша. Аудит находит их и предлагает заменить на правильные.

Что такое составной индекс и когда он нужен? +

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

Может ли индекс замедлить сайт? +

Да, если индексов слишком много или они лишние. Каждый индекс нужно обновлять при вставке и изменении данных, поэтому избыток индексов замедляет запись и раздувает базу. Поэтому мы не только добавляем нужные индексы, но и убираем бесполезные — баланс между скоростью чтения и записи важен.

Что значит полное сканирование таблицы в плане? +

Это когда база, чтобы найти нужные строки, читает таблицу целиком, строка за строкой, потому что подходящего индекса нет. На маленькой таблице это незаметно, на большой — главная причина медленного запроса. В плане EXPLAIN такое сканирование хорошо видно, и обычно оно лечится правильным индексом.

Почему тормозит фильтрация каталога по свойствам? +

Фильтр по свойствам инфоблока часто превращается в тяжёлую выборку без подходящего индекса, особенно на большом каталоге. Решается составным индексом под популярный фильтр, оптимизацией хранения свойств или правкой логики выборки. Конкретный путь подбираем по плану запроса и объёму данных.

Что такое проблема N+1? +

Это когда вместо одного запроса, который вернул бы все нужные данные сразу, код в цикле делает по запросу на каждую запись. Один цикл может породить сотни запросов на странице. На глаз незаметно, но под нагрузкой сотни мелких запросов забивают базу. Мы находим такие места и заменяем цикл на единую выборку или предзагрузку.

Как влияет режим хранения свойств инфоблока на скорость? +

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

Помогает ли кэширование вместо оптимизации запросов? +

Кэширование снимает часть нагрузки, но не лечит сам медленный запрос: при сбросе кэша он снова бьёт по базе во всю силу, а под нагрузкой кэш не всегда спасает. Оптимизация запроса и кэширование дополняют друг друга. Аудит показывает, где достаточно кэша, а где нужно чинить саму выборку.

Можно ли ускорить выборку, не трогая код Битрикс? +

Часто да: значительную часть тормозов снимают добавление правильных индексов и настройка базы, что не затрагивает код. Но если причина в логике выборки или N+1, без аккуратной правки кода не обойтись. Мы всегда указываем, что можно сделать на уровне базы, а что требует изменений в коде.

Что такое блокировки запросов и чем они опасны? +

Блокировка возникает, когда один запрос ждёт, пока другой освободит строку или таблицу. Под нагрузкой это даёт характерные зависания: сайт замирает на несколько секунд, а потом отпускает. Мы разбираем, какие запросы и в каком порядке создают взаимные ожидания, и предлагаем развести их или переписать.

Что такое InnoDB и почему важны его настройки? +

InnoDB — основной механизм хранения данных в MySQL для Битрикс. Его ключевой параметр — буферный пул, объём памяти под горячие данные. Если пул меньше объёма активных данных, база постоянно читает с диска вместо памяти, и сайт тормозит даже на мощном сервере. Мы приводим настройки в соответствие объёму базы.

Почему сортировки выполняются на диске и как это исправить? +

Когда результат нужно отсортировать или сгруппировать, а буферов памяти не хватает, база делает это во временных файлах на диске — это всегда медленно. Лечится настройкой размеров буферов и иногда правкой запроса, чтобы сортировка шла по индексу. Такие места хорошо видны в статистике и лечатся надёжно.

Мощный сервер не помог от тормозов — почему? +

Потому что мощность решает не всё: если запрос перебирает миллион строк вместо тысячи, быстрый процессор просто переберёт миллион чуть быстрее, а не уберёт сам перебор. Часто узкое место — настройки или конкретные запросы, а не нехватка ресурсов. Аудит показывает, в чём именно дело, прежде чем тратиться на железо.

Не нагрузит ли сбор данных боевой сайт? +

Нет. Включение журнала медленных запросов и снятие статистики практически не нагружают сайт и не мешают его работе. Мы настраиваем порог так, чтобы фиксировать значимые запросы без избыточной записи. Все изменения базы при оптимизации мы сначала проверяем на копии, а не на боевом сервере.

Нужно ли останавливать сайт на время аудита? +

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

Какие доступы вам нужны для аудита? +

Обычно нужен доступ к базе данных для снятия статистики и разбора планов, а также доступ к серверу для настройки журнала медленных запросов. Точный список зависит от инфраструктуры. Мы работаем по NDA, аккуратно обращаемся с доступами и можем действовать через вашего администратора, если так удобнее.

Можно ли внедрить рекомендации своими силами? +

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

Сколько стоит аудит медленных SQL-запросов? +

Экспресс-разбор TOP-10 запросов начинается от 25 000 рублей, полный аудит с разбором TOP-30 и причинами — от 55 000, аудит с внедрением исправлений — от 110 000. Стоимость зависит от объёма базы, числа запросов и глубины разбора. Точную смету присылаем после короткого брифа, бесплатно.

За какой срок будет готов отчёт? +

Экспресс-аудит занимает от 3 дней, полный аудит — от 5 дней, аудит с внедрением — от 10 дней. Большая часть времени уходит на сбор статистики под реальной нагрузкой, чтобы картина была честной. Точный срок фиксируем в смете до старта работ.

Что я получу по итогу аудита? +

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

Как вы приоритизируете, что чинить в первую очередь? +

Мы складываем длительность одного запроса с числом его вызовов и получаем совокупную стоимость. Запрос на полсекунды раз в час менее важен, чем запрос на сорок миллисекунд тысячу раз на странице. Список упорядочен по этой совокупной нагрузке, поэтому оптимизация даёт максимальный эффект на единицу усилий.

Гарантируете ли вы ускорение сайта? +

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

Начать проект

Разберём, почему тормозит ваша база?

Расскажите о проекте и симптомах — посмотрим журнал запросов и нагрузку и скажем, где узкое место. Смету пришлём в течение рабочего дня.

  • Ответим в течение рабочего дня
  • Бесплатный аудит процессов и расчёт
  • NDA и фиксированная смета