Рано или поздно, но база CDR разрастается до значительных размеров. Существует несколько довольно простых способов её оптимизировать.
1. Обновите MySQL. Каждая новая версия быстрее предыдущей. Вопрос обновления выходит за рамки темы, но напоминаю — при прыжках «через версию» оптимально выгрузить всю базу и загрузить заново на чистую установку, иначе возможны сюрпризы.
2. Оптимизируйте InnoDB. В конфиге my.cnf рекомендую следующие настройки:
3. Смените движок на InnoDB
4. Отключите performance schema если её не используете (my.cnf)
5. Включите кэширование запросов (my.cnf)
6. Партиционируйте таблицу, создав 12 разделов, по одному на месяц года.
7. Перейдите на сжатый формат, если у вас механический, а не SSD диск. Для этого и нужен формат Barracuda.
Рекомендации актуальны для MySQL 5.6
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