Найти тему
Битрикс и не только

Оптимизация базы данных для больших проектов 1С-Битрикс

Всем привет!

Буквально сегодня весь день занимался проблемой медленной работы с базой данных.

Немного вводной: есть корпоративный портал на битриксе. Живет он около 10 лет, соответственно мусора на нем накопилось очень-очень много. Таблица инфоблоков насчитывает около 500 тысяч элементов. И вот подошел момент, когда простые запросы к таблице инфоблоков (даже если писать их на чистом sql), результат которых должен быть под 100 записей длятся около 1-2 секунд, а если запрашивать пользовательские свойства, то и все 3-4. Примерный запрос:

SELECT
*
FROM b_iblock_element
WHERE
IBLOCK_ID = 3 AND ACTIVE = 'Y' AND
ACTIVE_TO >= '2019-08-14 00:00:00' AND
ACTIVE_FROM <= '2019-08-14 23:59:59'
ORDER BY `ACTIVE_FROM` ASC, `ACTIVE_TO` ASC LIMIT 0,100

Сервер стоит не слабый, на борту 64 Гб оперативной памяти, но вот настройки оказались далеки от совершенства. Процессами не сложного гугления, нашел оптимальные оптимальные настройки, которыми, с радостью, поделюсь:

[mysqld]
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 16384M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 256

Всего 7 строчек конфига, и вместо 1-2 секунд получаем 0.2 - 0.4 секунды.

Конечно ещё далеко от совершенства, но уже гораздо приятнее. Далее предстоит большая чистка базы данных, что, надеюсь, должно принести свои плоды.

На сайте highload есть хорошая подборка конфигураций, для серверов с разным объемом памяти (ссылка)

Если у Вас есть, что добавить к данным настройкам, напишите в комментарии. Спасибо за внимание