Pull to refresh

Оптимизация базы данных CDR в MySQL

Reading time1 min
Views10K
Рано или поздно, но база CDR разрастается до значительных размеров. Существует несколько довольно простых способов её оптимизировать.

1. Обновите MySQL. Каждая новая версия быстрее предыдущей. Вопрос обновления выходит за рамки темы, но напоминаю — при прыжках «через версию» оптимально выгрузить всю базу и загрузить заново на чистую установку, иначе возможны сюрпризы.

2. Оптимизируйте InnoDB. В конфиге my.cnf рекомендую следующие настройки:

innodb_buffer_pool_size = 256M ; Рекомендую установить здесь значение, равное половине RAM вашего сервера.
innodb_file_format = Barracuda ; Более новый формат БД. Пригодится далее.
innodb_buffer_pool_instances = 1 ; Если у вас не больше гигабайта выделено под буферный пул, ставьте единицу.
innodb_change_buffer_max_size=10 ; В CDR мы мало пишем и много читаем. Буфер на запись ставим небольшой.
innodb_flush_log_at_trx_commit=2 ; Дополнительная буферизация при записи ценой риска потери пары последних записей в случае краха.


3. Смените движок на InnoDB

ALTER TABLE cdr ENGINE=InnoDB;


4. Отключите performance schema если её не используете (my.cnf)

performance_schema=OFF


5. Включите кэширование запросов (my.cnf)

query_cache_type=1
query_cache_size=32M


6. Партиционируйте таблицу, создав 12 разделов, по одному на месяц года.

ALTER TABLE cdr
PARTITION BY HASH (month(calldate))
PARTITIONS 12;


7. Перейдите на сжатый формат, если у вас механический, а не SSD диск. Для этого и нужен формат Barracuda.

ALTER TABLE cdr
ROW_FORMAT=COMPRESSED;


Рекомендации актуальны для MySQL 5.6
Tags:
Hubs:
Total votes 12: ↑9 and ↓3+6
Comments18

Articles