Аудит медленных SQL-запросов на 1С-Битрикс
Находим самые дорогие SQL-запросы вашего проекта на 1С-Битрикс: разбираем slow query log и EXPLAIN-планы, выявляем отсутствующие и неэффективные индексы, тяжёлые выборки инфоблоков, N+1 и блокировки. На выходе — список запросов от худшего к лучшему с конкретными рекомендациями по оптимизации.
Что входит в аудит медленных SQL-запросов
Разбираем базу проекта по фактам: журнал запросов, планы выполнения, индексы, выборки инфоблоков, блокировки и настройки сервера баз данных.
Аудит медленных SQL-запросов: что это и зачем он нужен
Аудит медленных SQL-запросов — это прицельное обследование базы данных проекта на 1С-Битрикс, цель которого найти запросы, которые отнимают больше всего времени и ресурсов сервера, и объяснить, как их ускорить. Когда сайт тормозит, узким местом чаще всего оказывается не процессор и не оперативная память, а именно база: один тяжёлый запрос в горячем участке кода способен замедлить всю страницу, а под нагрузкой — выстроить очередь и положить сайт. Мы выявляем такие запросы по фактам, а не по догадкам: собираем журнал медленных запросов, разбираем план выполнения каждого из них и составляем список от худшего к лучшему с конкретными рекомендациями.
В отличие от поверхностного осмотра, когда подрядчик просто советует «добавить кэширование» или «обновить железо», аудит SQL опирается на измеримые данные. Мы смотрим, сколько раз запрос выполнился, сколько строк он прочитал, использовал ли индекс или прошёл по всей таблице, не сортировал ли результат на диске и не блокировал ли другие запросы. На этой основе видно, какой именно запрос виноват в тормозах, во сколько раз его можно ускорить и что для этого нужно сделать — добавить индекс, переписать выборку, изменить логику инфоблока или настроить InnoDB.
Какие проблемы базы мы находим
Большинство проблем производительности на Битрикс сводится к нескольким повторяющимся причинам. Чаще всего это отсутствующие индексы — когда запрос вынужден перебирать всю таблицу, потому что по нужному полю нет индекса. Дальше идут неэффективные индексы, которые есть, но не подходят под фактические условия выборки, и потому не используются. Отдельная большая тема — тяжёлые выборки инфоблоков: фильтрация по свойствам, сортировка по произвольным полям и выборка без ограничения объёма данных. И почти на каждом проекте встречается проблема N+1, когда вместо одного запроса в цикле выполняются сотни одинаковых.
Главные находки, которые попадают в отчёт по аудиту:
- запросы без индексов, идущие полным перебором таблицы вместо точечного поиска;
- неэффективные и неиспользуемые индексы, которые не подходят под реальные условия выборки;
- тяжёлые выборки инфоблоков: фильтрация по свойствам, сортировка и выборка лишних полей;
- проблема N+1, когда вместо одного запроса в цикле выполняются десятки и сотни;
- сортировки и группировки, которые выполняются на диске из-за нехватки буферов;
- блокировки и взаимные ожидания запросов, дающие зависания под нагрузкой;
- неоптимальные настройки InnoDB и буферного пула, не соответствующие объёму базы.
Чем slow query log и EXPLAIN полезнее интуиции
Сердце аудита — два инструмента. Журнал медленных запросов фиксирует все запросы, которые выполнялись дольше заданного порога, и показывает реальную картину: какие именно выборки тормозят в боевых условиях, как часто они повторяются и сколько строк прочитывают. Это снимает споры о том, что виновато: вместо предположений мы видим конкретные запросы с цифрами. Команда EXPLAIN раскрывает план выполнения каждого запроса — она показывает, по какому индексу идёт поиск, сколько строк база рассчитывает прочитать и где она вынуждена сканировать таблицу целиком. По плану сразу понятно, чего не хватает запросу, чтобы стать быстрым.
Сочетание этих двух источников даёт объективную приоритизацию. Мы складываем время одного выполнения запроса с числом его вызовов и получаем суммарную нагрузку, которую он создаёт. Запрос, который выполняется по полсекунды, но всего раз в час, менее важен, чем запрос на сорок миллисекунд, выполняющийся тысячи раз на каждой странице. Именно поэтому список в отчёте упорядочен не по длительности одного запроса, а по совокупной стоимости — так оптимизация бьёт точно туда, где она даст максимальный эффект для скорости сайта.
Что вы получаете на выходе
Результат аудита — это структурированный отчёт, а не набор общих советов. В нём перечень самых дорогих запросов от худшего к лучшему, для каждого приведён текст запроса, его план выполнения, причина медленной работы и конкретная рекомендация: какой индекс добавить, как переписать выборку инфоблока, где убрать N+1, какие параметры InnoDB поднять. К каждому пункту мы указываем ожидаемый эффект и сложность внедрения, чтобы вы могли сами расставить приоритеты или поручить нам внедрение. Отчёт написан так, чтобы его понял и руководитель, и разработчик: бизнес видит, что и насколько ускорится, а команда получает готовый план действий.
Аудит запросов хорошо ложится в общую работу над скоростью проекта. Он точечно отвечает на вопрос, почему тормозит база, и дополняет более широкий разбор инфраструктуры и кода. Если у вас уже есть подозрение, что дело именно в базе — высокая нагрузка на MySQL, долгие ответы каталога, зависания под трафиком — этот аудит даёт прямой и измеримый ответ, что чинить в первую очередь и какой выигрыш по скорости это принесёт.
Путь от медленного запроса к рекомендации
Запрос попадает в журнал медленных запросов, мы разбираем его план через EXPLAIN, находим причину и формулируем конкретную рекомендацию по ускорению.
Как мы проводим аудит запросов
От аккуратного сбора данных без вмешательства в боевой сайт до готового отчёта со списком запросов и рекомендациями.
Аудит SQL: своими силами, фрилансер или студия
| Критерий | Своими силами | Фрилансер | Студия B2Bsite |
|---|---|---|---|
| Сбор и анализ slow query log | Смотрят журнал, но без приоритизации по стоимости | Часто чинит один запрос, который назвали | Полный slow log и список от худшего к лучшему |
| Разбор EXPLAIN-планов | EXPLAIN читают частично, без выводов по индексам | EXPLAIN разбирает выборочно | EXPLAIN каждого тяжёлого запроса с выводами |
| Приоритизация оптимизации | Правят то, что заметнее, а не самое дорогое | Бьёт по симптому, не по корню проблемы | Оптимизируем по совокупной стоимости запроса |
| Компетенции по базе данных | Знают свой код, но не глубину MySQL | Компетенции зависят от конкретного человека | Глубокая экспертиза по MySQL и Битрикс |
| Формат результата | Риск добавить лишний индекс и замедлить запись | Отчёт обычно устный или без приоритетов | Письменный отчёт с эффектом и приоритетами |
Сколько занимает аудит
Сколько стоит аудит медленных SQL-запросов
Стоимость зависит от объёма базы, числа запросов и глубины разбора. Ниже — ориентиры; точную смету присылаем после короткого брифа, бесплатно.
Быстрый разбор TOP-10 самых дорогих запросов проекта.
- Анализ slow query log
- TOP-10 запросов по стоимости
- EXPLAIN ключевых запросов
- Короткий отчёт с рекомендациями
Глубокий разбор базы со списком запросов и причинами.
- TOP-30 запросов от худшего к лучшему
- EXPLAIN каждого тяжёлого запроса
- Разбор индексов и выборок инфоблоков
- Поиск N+1 и блокировок
- Проверка настроек InnoDB
- Письменный отчёт и разбор с командой
Аудит плюс внедрение исправлений с замером эффекта.
- Всё из «Полный аудит SQL»
- Внедрение индексов и правок
- Переписывание тяжёлых выборок
- Настройка параметров InnoDB
- Контрольный замер скорости до и после
Экспресс-аудит от 25 000 ₽
Быстрый разбор TOP-10 самых дорогих запросов проекта.
- Анализ slow query log
- TOP-10 запросов по стоимости
- EXPLAIN ключевых запросов
- Короткий отчёт с рекомендациями
Популярный Полный аудит SQL от 55 000 ₽
Глубокий разбор базы со списком запросов и причинами.
- TOP-30 запросов от худшего к лучшему
- EXPLAIN каждого тяжёлого запроса
- Разбор индексов и выборок инфоблоков
- Поиск N+1 и блокировок
- Проверка настроек InnoDB
- Письменный отчёт и разбор с командой
Аудит и оптимизация от 110 000 ₽
Аудит плюс внедрение исправлений с замером эффекта.
- Всё из «Полный аудит SQL»
- Внедрение индексов и правок
- Переписывание тяжёлых выборок
- Настройка параметров InnoDB
- Контрольный замер скорости до и после
Дополнительные опции
| Повторный замер скорости после внедрения | от 15 000 ₽ |
| Настройка постоянного мониторинга медленных запросов | от 20 000 ₽ |
| Оптимизация конкретного раздела или компонента | от 30 000 ₽ |
Сколько теряет бизнес на медленной базе
Прикиньте, во сколько обходятся тормоза каталога: медленные страницы снижают конверсию и отпугивают часть посетителей. Ускорение базы возвращает эти продажи.
Оценка по формуле: посетители × доля ухода в процентах × доход с посетителя. Это ориентир потерь, которые возвращает ускорение базы, а не гарантия.
Подберём формат аудита под ваш проект
Ответьте на несколько вопросов о проекте и нагрузке — предложим подходящий формат аудита запросов и пришлём ориентир по стоимости и срокам.
Кейсы аудита запросов
Что говорят о нашем аудите
На что можно рассчитывать по договору
Частые вопросы о медленных запросах — и наш ответ
Это не общие советы из интернета, а закономерности из реальных нагруженных проектов на Битрикс. Каждый ответ — позиция нашей команды.
Почему сайт тормозит из-за базы и что с этим делать
Когда проект на 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 и фиксированная смета