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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Оптимізація бази даних 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Оптимізація бази даних 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 дні