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. Типы цен (тест 1 vs 2) — незначительный рост числа запросов и умеренный рост времени выполнения.
  2. Количество складов (2 vs 3) — не влияет на страницы каталога; влияет на корзину и оформление заказа.
  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 сек.

Ключевые рекомендации

  1. Типы цен — не более 10–20. При необходимости индивидуальных цен используйте кастомные скидки.
  2. Склады — минимизируйте количество на этапе проектирования.
  3. Инфоблоки 2.0 — используйте при каталоге от 50 000 товаров; не забывайте об индексировании связей.
  4. Фасетный индекс — отключайте для конфигураций, где таблица фасетов превысит 10 млн записей.
  5. Поиск — индексируйте только необходимые свойства; иначе таблицы стемминга (b_search_content_stem) становятся гигантскими.

Для каталогов от 1 млн товаров

Стандартные компоненты Битрикс становятся узким горлышком. Применяют:

  • Вынос свойств в HL-блоки и инфоблоки 2.0
  • Внешние поисковые движки (ElasticSearch, OpenSearch, Meilisearch)
  • Кастомный кэш детальных страниц с инвалидацией только при изменении конкретного товара