Первое, что нам понадобится - это пятая версия MySQL и UTM 5 версии не ниже 2.1-006, с архивацией данных. Можно и без нее, но тогда хорошие результаты будут на хорошей машинке, которая стоит хороших денег. Этот вариант в основном неинтересный.
По умолчанию база данных UTM использует движок InnoDB, поэтому, чтобы биллинг быстрее выдавал отчеты, в MySQL нужно его настроить и включить опцию размещения таблиц в отдельных файлах (innodb_file_per_table). Настройки движка InnoDB по умолчанию для серьёзной работы не годятся совершенно.
Для сервера с 4 гигабайтами памяти и процессором с 4 ядрами в /etc/my.cnf нужно выставить следующие параметры (секция mysqld):
Код: Выделить всё
innodb_log_files_in_group=3
innodb_log_file_size=192M
innodb_buffer_pool_size=1024M
innodb_additional_mem_pool_size=64M
innodb_thread_concurrency=8
innodb_file_per_table=1
Прежде чем запускать MySQL с этими параметрами, нужно:
1. остановить ядро биллинга (и, возможно, радиус)
2. остановить MySQL
3. сделать полную копию каталога данных MySQL и файла my.cnf
4. запустить MySQL
5. снять дамп базы UTM
6. снять дампы остальных баз, хранящих данные в InnoDB (если они есть)
7. затереть базу UTM (DROP DATABASE)
8. затереть остальные базы, использующие InnoDB (если есть)
9. остановить MySQL
10. потереть файлы ib_logfile*, ibdata* в каталоге данных MySQL
И далее:
11. внести изменения в my.cnf
12. запустить MySQL (он пересоздаст хранилище InnoDB с новыми параметрами)
13. создать базу UTM (CREATE DATABASE ... CHARACTER SET, character set каждой базы можно посмотреть в файле db.opt перед шагами 7 и 8, потом его задать при создании)
14. залить базу из дампа
15. выполнить шаги 13 и 14 для остальных баз InnoDB
16. запустить ядро биллинга (и радиус, если есть)
Простое изменение параметров приведет к отказу запуска MySQL из-за несоответствия хранилища InnoDB параметрам, заданным в конфиге.
Очень важно сделать бэкап всего каталога данных MySQL (шаг 3), предварительно его остановив. Если что-то пойдет не так, будет к чему откатиться. Откат делается опять-таки при остановленном MySQL стиранием рабочего каталога данных и возвращением сохраненной копии на его место. Также нужно вернуть старый my.cnf на место.
После успешного запуска посмотрите, есть ли какие-нибудь записи в таблице archives. Это можно сделать запросом
Код: Выделить всё
SELECT COUNT(*) FROM archives
Инструкция по настройке архивации
После такой настройки и запуска архивации наблюдайте за размером таблиц discount_transactions_all, discount_transactions_iptraffic_all, как самых толстых, на сколько они будут за месяц вырастать, и подкручивайте размер буфера innodb_buffer_pool_size так, чтобы по возможности туда влезала самая большая табличка, а innodb_additional_mem_pool_size так, чтобы сохранилось соотношение первоначальных цифр. Изменение этих параметров можно производить без пересоздания хранилища данных MySQL.