Для улучшения производительности нужно использовать партиционирование таблиц.
Для начала отключите стандартную ротацию логов
Code Block |
---|
|
$conf{USE_PARTITIONING}=1 |
Для ручного партиционирования есть billd плагин
Code Block |
---|
|
/usr/abills/libexec/billd partitioning DEBUG=1 |
Плагин инициализирует партиционизацию таблиц и обеспечивает чистку. Плагин нужно запускать один раз в день через крон.
Code Block |
---|
|
1 3 * * * root /usr/abills/libexec/billd partitioning |
Сейчас плагин следит за таблицами
Code Block |
---|
|
'ipn_traf_detail'
's_detail'
'errors_log'
'internet_log' |
Для выбора отдельной таблицы используйте аргумент TABLES=xxx,xx,xxx
Перед началом партиционизации таблиц, приведите контрольные поля к правильному формату
Code Block |
---|
|
ALTER TABLE `ipn_traf_detail` CHANGE COLUMN s_time s_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `ipn_traf_detail` CHANGE COLUMN f_time f_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `s_detail` CHANGE COLUMN start start TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `errors_log` CHANGE COLUMN date date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `internet_log` CHANGE COLUMN start start TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; |
Для MySQL < 5.6.5
До версии 5.6.5 существовало ограничение на одну колонку с значением по умолчанию CURRENT_TIMESTAMP
.
Если у вас возникает ошибка
Code Block |
---|
|
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause |
и нет возможности обновить mysql-server, то вместо запроса
Code Block |
---|
|
ALTER TABLE `ipn_traf_detail` CHANGE COLUMN f_time f_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; |
нужно применить
Code Block |
---|
|
ALTER TABLE `ipn_traf_detail` CHANGE COLUMN f_time f_time TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'; |