БесплатноБазовая интеграция с 1С в подарок при заказе интернет-магазина под ключ
Ускорение и производительность

Оптимизация базы данных и запросов на сайте 1С-Битрикс

Ускоряем работу с базой данных на 1С-Битрикс: находим и переписываем медленные SQL-запросы, подбираем индексы, настраиваем Highload-блоки, тюним MySQL и PostgreSQL. Снижаем нагрузку на базу и время ответа без правки ядра.

10 летс тяжёлыми базами на Битрикс
150+проектов по ускорению SQL
от 3 днейдо первого ускорения
×3–10типичное ускорение выборок
медленный SQL3200 ms после индекса40 ms INDEX MySQL · PostgreSQL
Подробно об услуге

Оптимизация базы данных и запросов на 1С-Битрикс: что это и зачем

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

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

Из чего складывается оптимизация базы данных

Под общим названием скрывается несколько взаимосвязанных направлений, и каждое закрывает свой класс проблем. Оптимизация SQL-запросов вскрывает конкретные тяжёлые выборки, разбирает их планы выполнения и переписывает так, чтобы база отдавала результат быстро. Работа с индексами подбирает недостающие индексы под фактические запросы и убирает лишние, которые только замедляют запись. Тюнинг MySQL и PostgreSQL приводит настройки СУБД в соответствие с объёмом данных и характером нагрузки: буферы, кеши, параметры соединений и планировщика. Оптимизация Highload-блоков ускоряет работу с большими пользовательскими справочниками, которые в Битрикс хранятся отдельно от инфоблоков. А анализ медленных запросов даёт постоянную картину того, какие выборки нагружают базу прямо сейчас.

Основные узлы, которые мы измеряем и приводим в порядок:

  • медленные SQL-запросы — лог медленных запросов, тяжёлые выборки каталога, фильтра и личных кабинетов;
  • индексы — подбор недостающих, удаление избыточных, составные индексы под реальные условия;
  • планы выполнения — разбор EXPLAIN, перебор строк, временные таблицы и сортировки на диске;
  • Highload-блоки — большие справочники, выборки и фильтрация по пользовательским полям;
  • настройки MySQL и PostgreSQL — буферы, кеши, параметры памяти и планировщика под ваш объём;
  • схема обращений — лишние запросы в цикле, дубли выборок, кеширование результата на уровне приложения.

Кому нужна оптимизация запросов на Битрикс

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

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

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

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

Эта страница — хаб направления: ниже собраны отдельные услуги по работе с базой данных, чтобы вы могли выбрать нужное — разбор конкретных SQL-запросов, тюнинг СУБД, оптимизацию Highload-блоков или постоянный анализ медленных выборок. Если вы пока не уверены, где именно теряется скорость, начните с анализа медленных запросов: он покажет, какие выборки нагружают базу, и подскажет, с какого направления выгоднее начинать. А если узких мест много и они складываются в общий технический долг, имеет смысл вести работу комплексно, закрывая базу данных вместе с кешированием и серверной конфигурацией.

Направления

Из чего складывается оптимизация базы данных

Работа с базой делится на направления: каждое закрывает свой слой — от конкретных запросов до настроек СУБД и Highload-блоков. Выберите нужное или закажите комплексную оптимизацию.

Оптимизация SQL-запросов

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

  • Разбор планов выполнения EXPLAIN
  • Переписывание тяжёлых выборок
  • Подбор недостающих индексов
  • Кеширование результата запросов

Оптимизация MySQL / PostgreSQL

Тюнинг самой СУБД под объём данных и нагрузку: буферы, кеши, память и параметры планировщика для быстрой работы базы.

  • Настройка буферов и кешей
  • Параметры памяти и соединений
  • Тюнинг планировщика запросов
  • Подбор движка и конфигурации

Оптимизация Highload-блоков

Ускорение работы с большими пользовательскими справочниками Битрикс: индексы по полям, выборки и фильтрация без перебора.

  • Индексы по пользовательским полям
  • Быстрые выборки из справочников
  • Фильтрация без перебора строк
  • Кеширование тяжёлых обращений

Анализ медленных запросов

Поиск запросов, которые съедают время базы: лог медленных запросов, профилирование и карта нагрузки по выборкам.

  • Лог и профилирование запросов
  • Карта нагрузки по выборкам
  • Топ тяжёлых запросов с разбором
  • Мониторинг нагрузки на базу
Что делаем

Что входит в оптимизацию базы данных и запросов

Работаем со всем слоем базы данных: от разбора конкретных медленных SQL до тюнинга СУБД и Highload-блоков. Каждое узкое место находим по приборам и закрываем точечно, без правки ядра.

Поиск медленных SQL

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

Подбор индексов

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

Разбор планов выполнения

Анализируем EXPLAIN: перебор строк, временные таблицы, сортировки на диске — и переписываем тяжёлые выборки.

Тюнинг MySQL и PostgreSQL

Приводим настройки СУБД к объёму данных и нагрузке: буферы, кеши, память, параметры соединений и планировщика.

Оптимизация Highload-блоков

Ускоряем работу с большими справочниками: индексы по пользовательским полям, выборки и фильтрация без перебора.

Снятие лишних запросов

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

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

Путь тяжёлого запроса и где теряется время базы

Запрос приложения проходит через планировщик СУБД к данным на диске. Мы измеряем каждое звено и показываем, где именно база перебирает лишние строки и куда уходит время ответа.

ПриложениеSQL · компоненты ПланировщикEXPLAIN · план Индексыпоиск vs перебор Данныедиск · буферы Результатвремя ответа Каждое звено замеряется отдельно, чтобы видеть, где база перебирает лишние строки
Запрос приложения → планировщик → индексы → данные на диске → результат.
Сравнение

Своими силами, фрилансер или студия B2Bsite

Сравниваем три способа ускорить работу базы данных на Битрикс по тому, что важно бизнесу: скорость реакции, гарантии, прозрачность, компетенции и риски.

Критерий Своими силамиФрилансерСтудия B2Bsite
Скорость реакции Зависит от загрузки штатаКогда освободитсяСтарт за 1–2 дня
Гарантии и SLA Нет формальных гарантийДоговорённости на словахЗамер нагрузки в договоре
Прозрачность Индексы добавляют вслепуюОтчёт без замеров до и послеПланы EXPLAIN и цифры по запросам
Компетенции Узкий, без разбора плановТочечный, без тюнинга СУБДSQL, индексы, СУБД и Highload
Риски Можно сломать запись и выдачуЗависимость от одного человекаЭффект подтверждаем замерами
Этапы

Как мы оптимизируем базу данных и запросы

01

Бриф и доступы

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

02

Снятие нагрузки

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

03

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

Анализируем планы выполнения тяжёлых запросов: перебор строк, временные таблицы, сортировки и отсутствующие индексы.

04

Индексы и переписывание

Подбираем индексы под фактические запросы, переписываем тяжёлые выборки и снимаем лишние обращения к базе.

05

Тюнинг СУБД

Приводим настройки MySQL или PostgreSQL к объёму данных и нагрузке: буферы, кеши, память и параметры планировщика.

06

Контрольный замер

После правок повторяем замеры и подтверждаем результат цифрами: снижение времени ответа и нагрузки на базу.

Сроки

Сколько занимает оптимизация базы данных

1–2 дня Доступы, бриф и снятие нагрузки на базу
1
2–4 дня Разбор планов и поиск тяжёлых запросов
2
2–5 дней Индексы, переписывание выборок и тюнинг СУБД
3
1–2 дня Отчёт с разбором запросов и эффектом
4
после правок Контрольный замер и подтверждение результата
5
Стоимость

Сколько стоит оптимизация базы данных и запросов

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

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

Поиск топа медленных запросов и подбор первых индексов для быстрого эффекта.

  • Лог медленных запросов
  • Топ тяжёлых выборок
  • Подбор недостающих индексов
  • Список быстрых побед
Популярный выбор
Оптимизация запросов
от 60 000 ₽
Срок: от 7 дней

Сквозная работа с базой: разбор планов, переписывание выборок и снятие лишних запросов.

  • Разбор планов выполнения
  • Переписывание тяжёлых выборок
  • Составные индексы под запросы
  • Снятие дублей и запросов в цикле
  • Отчёт с замерами до и после
База под нагрузку
от 120 000 ₽
Срок: от 12 дней

Полная оптимизация плюс тюнинг СУБД и Highload-блоков под высокий объём данных.

  • Всё из «Оптимизации запросов»
  • Тюнинг MySQL и PostgreSQL
  • Оптимизация Highload-блоков
  • Проектирование под нагрузку
  • Контрольный замер после правок
Экспресс-разбор от 25 000 ₽
Срок: от 3 дней

Поиск топа медленных запросов и подбор первых индексов для быстрого эффекта.

  • Лог медленных запросов
  • Топ тяжёлых выборок
  • Подбор недостающих индексов
  • Список быстрых побед
Популярный Оптимизация запросов от 60 000 ₽
Срок: от 7 дней

Сквозная работа с базой: разбор планов, переписывание выборок и снятие лишних запросов.

  • Разбор планов выполнения
  • Переписывание тяжёлых выборок
  • Составные индексы под запросы
  • Снятие дублей и запросов в цикле
  • Отчёт с замерами до и после
База под нагрузку от 120 000 ₽
Срок: от 12 дней

Полная оптимизация плюс тюнинг СУБД и Highload-блоков под высокий объём данных.

  • Всё из «Оптимизации запросов»
  • Тюнинг MySQL и PostgreSQL
  • Оптимизация Highload-блоков
  • Проектирование под нагрузку
  • Контрольный замер после правок

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

Настройка мониторинга медленных запросов от 30 000 ₽
Очистка разросшихся журналов и истории от 20 000 ₽
Повторный контрольный замер нагрузки от 10 000 ₽
Калькулятор услуги

Сколько выручки теряет медленная база

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

Потери выручки в месяц из-за тормозов базы 0 ₽

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

Умный расчёт

Подберём направление под вашу базу

Ответьте на несколько вопросов о сайте, объёме базы и характере тормозов — предложим подходящее направление работы с базой данных и сориентируем по срокам и цене.

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

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

Кейсы оптимизации базы данных

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

Ускорение каталога с фильтром на 200 тысяч товаров

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

−74%Время каталога
−60%Нагрузка на базу
8 днейСрок
B2B-портал

Разбор тяжёлых выборок в личных кабинетах

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

−85%Запросов на странице
×4Отклик кабинета
11 днейСрок
Контентный портал

Тюнинг MySQL и чистка разросшихся журналов

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

−55%Нагрузка в пик
−80%Медленных SQL
9 днейСрок
База знаний

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

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

Индексы

База нагружена, но непонятно, каких индексов не хватает

Наш ответ

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

Фильтр

Каталог с умным фильтром открывается медленно на большом объёме

Наш ответ

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

Запросы

На одной странице сотни запросов к базе, всё подвисает

Наш ответ

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

Сервер

Докупили мощностей, а база всё равно загружена

Наш ответ

Часто узкое место не в железе, а в настройках СУБД и тяжёлых запросах. Слабые буферы MySQL, кеши не под объём данных, выборки без индексов — апгрейд сервера такие проблемы не лечит. Тюним настройки и закрываем тяжёлые запросы, и нагрузка падает без покупки мощностей.

Отзывы клиентов

Что говорят после оптимизации базы данных

«Каталог открывался по пять секунд, грешили на хостинг. Оказалось, фильтр перебирал свойства без индексов. После правок страница стала открываться мгновенно, нагрузка на сервер упала вдвое.»

Сергей В. Руководитель интернет-магазина

«Личный кабинет дилеров подвисал на больших заказах. Ребята нашли десятки лишних запросов в цикле и закешировали выборки. Кабинет стал отзывчивым, клиенты перестали жаловаться.»

Наталья П. Директор по развитию B2B

«Ценно, что не наугад, а с цифрами: показали планы выполнения, замеры до и после по каждому запросу. Видно, за что платишь. Сервер базы перестал быть загружен на сотню процентов в час пик.»

Андрей К. Технический директор
Почему мы

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

Замер до и после

Фиксируем нагрузку и время запросов в начале и после правок — эффект виден в цифрах, а не на словах.

Работаем по приборам

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

Индексы под запросы

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

Без правки ядра

Оптимизация выносится в обработчики и кеш, обновления Битрикса проходят без конфликтов.

MySQL и PostgreSQL

Тюним обе СУБД под объём данных и нагрузку, а не ограничиваемся одним лишь подбором индексов.

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

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

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

Оптимизация базы данных или докупка сервера

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

Почему база на Битрикс нагружена не сама по себе

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

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

Что мы делаем с базой и как

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

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

Чем оптимизация базы отличается от подбора индексов наугад

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

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

Highload-блоки и большие справочники

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

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

Когда нужна глубокая работа, а когда хватит экспресс-разбора

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

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

Почему отчёт с замерами важнее обещаний

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

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

Типичные узкие места в базах на Битрикс

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

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

Как оптимизация базы экономит деньги бизнесу

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

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

Как удержать результат и с чего начать

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

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

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

Частые вопросы об оптимизации базы данных и запросов

Что такое оптимизация базы данных простыми словами? +

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

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

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

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

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

Что такое Highload-блок в Битрикс? +

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

Чем оптимизация базы отличается от докупки сервера? +

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

Почему мой каталог на Битрикс открывается медленно? +

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

Как вы находите тяжёлые запросы? +

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

Поможет ли добавление индексов ускорить базу? +

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

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

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

Что значит «выборки в цикле» и почему это плохо? +

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

Чем отличается оптимизация MySQL от PostgreSQL? +

Принцип один — привести настройки СУБД к объёму данных и нагрузке, — но детали разные. У MySQL это буферы движка хранения, кеши и параметры соединений; у PostgreSQL — настройки памяти, планировщика и автоочистки. Битрикс работает с обеими СУБД, и мы тюним ту, что используется на вашем проекте, под её особенности.

Зачем тюнить настройки базы, если есть индексы? +

Индексы и настройки СУБД работают вместе. Правильный индекс ускоряет выборку, но если у базы мало памяти под буферы, индекс и горячие данные не помещаются в оперативку и читаются с диска при каждом запросе. Тюнинг даёт базе достаточно памяти и кешей, чтобы индексы реально работали на полную, а не упирались в диск.

Докупили мощный сервер, а база всё равно загружена — почему? +

Часто узкое место не в железе, а в настройках СУБД по умолчанию и тяжёлых запросах. Заниженные буферы, кеши не под объём данных, выборки без индексов — апгрейд сервера такие проблемы не лечит. Мы тюним настройки под фактический объём и закрываем тяжёлые запросы, и нагрузка падает без покупки новых мощностей.

Не сломает ли тюнинг базы работу сайта? +

Нет. Изменения настроек мы вносим аккуратно, по одному, с проверкой на копии или в окно низкой нагрузки, и всегда можем откатить. Тюнинг не трогает данные и логику сайта — он лишь даёт базе оптимальные параметры памяти, кешей и планировщика под ваш объём. Все риски проговариваем заранее на брифе.

Можно ли ускорить базу без перехода на другую СУБД? +

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

Как ускорить работу с Highload-блоками? +

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

У нас инфоблоки разрослись до миллионов записей, что делать? +

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

Что такое разросшиеся журналы и почему они мешают? +

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

Выдержит ли база нагрузку в день распродажи? +

Это проверяется заранее. Мы разбираем тяжёлые запросы, тюним СУБД под пик и при необходимости моделируем нагрузку, чтобы найти звено, которое сдаётся первым. Гораздо дешевле закрыть предел заранее, чем потерять день распродажи из-за того, что база захлебнулась под наплывом заказов и сайт начал отдавать ошибки.

Что делать, если данных будет всё больше со временем? +

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

Сколько стоит оптимизация базы данных и запросов? +

Экспресс-разбор с поиском топа медленных запросов и подбором индексов начинается от 25 000 рублей, сквозная оптимизация запросов — от 60 000, полная работа с тюнингом СУБД и Highload — от 120 000. Цена зависит от объёма базы, числа тяжёлых запросов и глубины тюнинга. Точную смету присылаем после короткого брифа бесплатно.

За какой срок реально ускорить базу? +

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

Насколько реально ускорить запросы? +

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

Что я получу по итогу работы? +

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

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

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

Что делать, чтобы база не замедлилась снова? +

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

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

Ускорим базу данных вашего сайта?

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

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