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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Оптимизация базы данных 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1165
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

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

Диагностика: что занимает место

Начинайте с анализа размеров таблиц. В MySQL/MariaDB:

SELECT
    TABLE_NAME,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS size_mb,
    TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'bitrix_db'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC
LIMIT 20;

Для Битрикс-сайтов типично: b_event_log, b_stat_session, b_stat_adv_back, b_search_content, b_cache_tag, b_file — занимают 80% объёма БД.

Таблицы кеша

b_cache_tag — таблица тегов кеша. При каждом сбросе кеша Битрикс не удаляет устаревшие записи немедленно, а помечает их. Таблица растёт постоянно.

Очистка устаревших тегов кеша:

DELETE FROM b_cache_tag WHERE SITE_ID IS NULL AND CACHE_SALT IS NULL;

Либо через административный раздел Настройки → Управление модулями → Главный модуль → Очистить кеш.

Полная пересборка таблицы после очистки:

OPTIMIZE TABLE b_cache_tag;

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

Таблица сессий

b_user_session и b_sale_user_session хранят пользовательские сессии. Без настроенной очистки они растут бесконечно.

Проверить, включена ли автоматическая очистка сессий: Настройки → Настройки продукта → Главный модуль → вкладка «Сессия». Параметр «Время жизни сессии» должен соответствовать session.gc_maxlifetime в php.ini.

Принудительная очистка устаревших сессий старше 24 часов:

DELETE FROM b_user_session
WHERE DATE_CREATE < DATE_SUB(NOW(), INTERVAL 24 HOUR);

DELETE FROM b_sale_user_session
WHERE DATE_INSERT < DATE_SUB(NOW(), INTERVAL 7 DAY);

Журнал событий

b_event_log — таблица аудита действий пользователей. На активных сайтах добавляет миллионы записей в месяц. Большинству проектов не нужны события старше 90 дней.

DELETE FROM b_event_log WHERE DATE_CREATE < DATE_SUB(NOW(), INTERVAL 90 DAY);
OPTIMIZE TABLE b_event_log;

Настройка автоматической очистки: Настройки → Журнал событий → Очистить события → Хранить события за последние N дней.

Таблицы статистики

Модуль statistic заполняет b_stat_session, b_stat_page_adv, b_stat_adv_back. Если статистика не используется (многие переходят на Яндекс.Метрику), модуль можно отключить полностью: Настройки → Модули → Веб-аналитика → Отключить. Это прекращает запись и снимает нагрузку на БД.

Если отключить нельзя — настроить период хранения: Настройки → Веб-аналитика → Настройки → Глубина хранения статистики.

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

Включите slow query log для выявления тяжёлых запросов. В my.cnf:

slow_query_log       = 1
slow_query_log_file  = /var/log/mysql/slow.log
long_query_time      = 1
log_queries_not_using_indexes = 1

Для Битрикс типичные узкие места:

Таблица Проблема Решение
b_iblock_element Поиск по ACTIVE + IBLOCK_ID + TIMESTAMP_X без индекса CREATE INDEX ix_active_iblock ON b_iblock_element (ACTIVE, IBLOCK_ID, TIMESTAMP_X)
b_iblock_element_property JOIN без индекса по IBLOCK_PROPERTY_ID + VALUE Битрикс создаёт индексы при включении «Создать индекс» в настройках свойства
b_sale_order Выборки по USER_ID + STATUS_ID CREATE INDEX ix_user_status ON b_sale_order (USER_ID, STATUS_ID)
b_search_content Устаревшие записи удалённых страниц Переиндексация: /bitrix/admin/search_reindex.php

Настройка innodb_buffer_pool_size

Для MySQL/MariaDB самый важный параметр производительности — innodb_buffer_pool_size. Для сервера, выделенного под БД, устанавливайте 60–70% от доступной RAM:

innodb_buffer_pool_size = 4G   # для сервера с 8 GB RAM
innodb_log_file_size    = 512M
innodb_flush_log_at_trx_commit = 2   # чуть меньше гарантий, но значительно быстрее

innodb_flush_log_at_trx_commit = 2 допускает потерю до 1 секунды транзакций при аварийном отключении питания, но даёт прирост производительности записи в 2–5 раз. Для большинства e-commerce приемлемо.

Регламент обслуживания БД

Операция Частота Инструмент
Очистка b_event_log Еженедельно SQL или административная панель
Очистка устаревших сессий Ежедневно (cron) SQL-скрипт
Оптимизация фрагментированных таблиц Ежемесячно OPTIMIZE TABLE
Анализ slow query log Ежемесячно pt-query-digest
Резервная копия перед оптимизацией Перед каждым ALTER TABLE mysqldump

Сроки работ

Масштаб Состав Срок
Базовый Очистка кеша, сессий, журнала событий, OPTIMIZE TABLE 2–4 часа
Полный Анализ slow queries, оптимизация индексов, настройка my.cnf, регламент обслуживания 1–2 дня