377 слов | 3 минуты
Производительность интернет-магазина на 1С-Битрикс
Результаты нагрузочного тестирования стандартного демо-магазина Битрикс при различных конфигурациях каталога. Анализ влияния ключевых параметров на время генерации страниц и количество запросов в секунду.
Параметры тестирования
Платформа: 1С-Битрикс: Управление сайтом 25.550.100 (редакция «Бизнес»)
Шаблон: стандартный «Интернет-магазин — Одежда» (два инфоблока: каталог и торговые предложения)
Сервер:
- Процессор: 6 ядер × 3,8 ГГц
- ОЗУ: 10 ГБ
- ПЗУ: SSD 256 ГБ
Тестируемые страницы: детальная карточка товара, список товаров с умным фильтром, страница применённого фильтра, поиск.
Метрики: время генерации страницы, количество SQL-запросов, время выполнения запросов.
Нагрузка: Яндекс.Танк, линейный рост от 10 до 50 RPS за 120 секунд (3 600 запросов), 20 инстансов.
Все тесты — при выключённом кэшировании. При включённом кэше время генерации всех страниц < 0,2 сек.
Конфигурации каталога
| № | Товаров | SKU | Свойств товаров | Свойств SKU | Типов цен | Складов | Фасет. индекс | Инфоблоки | Средний RPS |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 10 000 | 10 | 20 | 25 | 10 | 10 | да | 1.0 | 25.94 |
| 2 | 10 000 | 10 | 20 | 25 | 50 | 10 | да | 1.0 | 21.32 |
| 3 | 10 000 | 10 | 20 | 25 | 10 | 50 | да | 1.0 | 22.74 |
| 4 | 10 000 | 10 | 20 | 25 | 100 | 50 | да | 1.0 | 19.25 |
| 5 | 10 000 | 10 | 50 | 50 | 100 | 50 | да | 1.0 | 18.57 |
| 6 | 50 000 | 10 | 20 | 10 | 1 | 10 | нет | 1.0 | 20.22 |
| 7 | 50 000 | 10 | 20 | 10 | 1 | 10 | да | 1.0 | 15.56 |
| 8 | 50 000 | 10 | 20 | 10 | 1 | 10 | да | 2.0 | 22.46 |
| 9 | 100 000 | 10 | 20 | 15 | 1 | 10 | да | 2.0 | 14.22 |
Результаты: количество SQL-запросов
| № | Детальная | Список товаров | Применённый фильтр |
|---|---|---|---|
| 1 | 888 | 853 | 539 |
| 2 | 913 | 846 | 531 |
| 4 | 745 | 912 | 663 |
| 5 | 830 | 992 | 743 |
| 7 | 1083 | 830 | 504 |
| 8 | 1078 | 807 | 486 |
Результаты: время генерации страниц (сек.)
| № | Детальная | Список товаров | Применённый фильтр |
|---|---|---|---|
| 1 | 0,8219 | 0,836 | 0,5571 |
| 5 | 0,8453 | 1,7675 | 1,1792 |
| 6 | 0,6437 | 10,4297 | 10,0334 |
| 7 | 1,0272 | 1,3227 | 1,0759 |
| 8 | 0,9494 | 0,9108 | 0,8256 |
| 9 | 0,8053 | 32,7897 | 38,837 |
Интерпретация результатов
- Типы цен (тест 1 vs 2) — незначительный рост числа запросов и умеренный рост времени выполнения.
- Количество складов (2 vs 3) — не влияет на страницы каталога; влияет на корзину и оформление заказа.
- Свойства SKU (4 vs 5) — значительно увеличивают время запросов на страницах списка и фильтрации из-за роста таблицы
b_iblock_element_property.
Фасетный индекс
Фасетный индекс (Property Index) ускоряет умный фильтр, но при росте таблицы свыше ~10 млн записей деградирует из-за тяжёлых JOIN-ов.
Формула оценки размера таблицы фасетов:
Кол-во записей =
кол-во разделов × (
(кол-во товаров × кол-во свойств товаров) +
(кол-во SKU × (кол-во свойств SKU + кол-во типов цен))
)
Вывод: при большом количестве разделов, свойств, типов цен или SKU таблица фасетов растёт критически и начинает тормозить JOIN-запросы.
Инфоблоки 2.0
Создают отдельную таблицу под каждый инфоблок — свойства хранятся как столбцы, а не как отдельные записи. Снижает размер таблиц и ускоряет выборку.
Важно: при переводе инфоблока SKU на 2.0 обязательно создайте MySQL-индекс на столбец привязки к родительскому товару:
CREATE INDEX idx_prop19_elem
ON b_iblock_element_prop_s3 (PROPERTY_19, IBLOCK_ELEMENT_ID);
Без этого индекса время генерации страниц возрастает с ~4 сек. до >10 сек.
Ключевые рекомендации
- Типы цен — не более 10–20. При необходимости индивидуальных цен используйте кастомные скидки.
- Склады — минимизируйте количество на этапе проектирования.
- Инфоблоки 2.0 — используйте при каталоге от 50 000 товаров; не забывайте об индексировании связей.
- Фасетный индекс — отключайте для конфигураций, где таблица фасетов превысит 10 млн записей.
- Поиск — индексируйте только необходимые свойства; иначе таблицы стемминга (
b_search_content_stem) становятся гигантскими.
Для каталогов от 1 млн товаров
Стандартные компоненты Битрикс становятся узким горлышком. Применяют:
- Вынос свойств в HL-блоки и инфоблоки 2.0
- Внешние поисковые движки (ElasticSearch, OpenSearch, Meilisearch)
- Кастомный кэш детальных страниц с инвалидацией только при изменении конкретного товара