Налаштування MySQL/MariaDB для 1С-Бітрікс

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

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

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

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

  • 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

Налаштування MySQL/MariaDB для 1С-Бітрікс

Налаштування MySQL/MariaDB для 1С-Бітрікс

«Сервер з 32 ГБ RAM, але MySQL використовує лише 2 ГБ» — типова ситуація на установці 1С-Бітрікс зі стандартними налаштуваннями. innodb_buffer_pool_size за замовчуванням 128 МБ або 8 МБ залежно від дистрибутива. На каталозі з 500 000 SKU робочий набір даних — 4–8 ГБ. Без нормального buffer pool кожен запит до незакешованих сторінок іде на диск: 5–10 мс замість 0,1 мс з пам'яті.

Ключові параметри InnoDB

Файл /etc/mysql/conf.d/bitrix.cnf:

[mysqld]
# ===== InnoDB Buffer Pool =====
# 60-70% від RAM для виділеного DB-сервера
innodb_buffer_pool_size = 20G
innodb_buffer_pool_instances = 8  # ~1 instance per 1-2GB

# ===== InnoDB I/O =====
innodb_io_capacity = 2000         # для SSD: 2000-4000
innodb_io_capacity_max = 4000
innodb_flush_method = O_DIRECT    # обхід OS page cache
innodb_flush_log_at_trx_commit = 2  # без fsync на кожну транзакцію

# ===== Redo Log =====
# MySQL 8.0+: керується автоматично
# MariaDB / MySQL 5.7:
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M

# ===== Connections =====
max_connections = 500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300

# ===== Query Cache =====
# MySQL 8.0: Query Cache видалено
# MariaDB / MySQL 5.7: вимикаємо (краще використовувати Memcached/Redis)
query_cache_type = 0
query_cache_size = 0

# ===== Temp Tables =====
tmp_table_size = 256M
max_heap_table_size = 256M

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

innodb_flush_log_at_trx_commit = 2 — транзакційний лог скидається на диск раз на секунду, а не при кожному COMMIT. Ризик втрати транзакцій за 1 секунду при збої — прийнятний для більшості інтернет-магазинів. Дає зростання запису в 3–5 разів.

innodb_flush_method = O_DIRECT — MySQL пише напряму до блокового пристрою, минаючи OS page cache. Усуває подвійне кешування (InnoDB buffer pool + OS cache).

Налаштування для NVMe SSD

На сучасних NVMe дисках можна бути агресивнішими:

innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_read_io_threads = 8
innodb_write_io_threads = 8

Таблиці 1С-Бітрікс: специфіка

b_search_content — повнотекстовий індекс. Таблиця зростає до 2–5 ГБ на великих сайтах. Якщо використовується Elasticsearch — цю таблицю можна усікти і вимкнути вбудовану індексацію.

b_iblock_element_prop_m* — множинні властивості. При 1М+ рядків без індексів — гальмо розумного фільтра.

b_event — лог подій системи. На активних сайтах зростає на 10–50 МБ на добу. Очищати через агент або cron:

DELETE FROM b_event WHERE DATE_COLUMN < DATE_SUB(NOW(), INTERVAL 90 DAY);

Моніторинг стану InnoDB

-- Ефективність buffer pool (має бути > 99%)
SELECT
  (1 - (
    (SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads')
    /
    (SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests')
  )) * 100 AS buffer_pool_hit_rate;

-- Топ очікувань
SELECT * FROM sys.innodb_lock_waits;

buffer_pool_hit_rate < 95%innodb_buffer_pool_size занадто малий, дані постійно зчитуються з диска.

Терміни

Аудит поточної конфігурації, налаштування параметрів, перевірка через slow log — 4–8 годин. Застосування потребує рестарту MySQL (5–10 секунд простою) або виконання частини параметрів через SET GLOBAL без рестарту.