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

