1) Тоже данные только за текущий месяц (ежемесячно перегоняю в архив Вашим скриптом ), правда таблиц объем 22 и 25 гиг соответственно.
2) в my.cnf innodb_buffer_pool_size всего 512М.
3) а об этом поподробней.
Смотрите командой SHOW INDEX FROM discount_transactions_iptraffic_all. Если его нет, то CREATE INDEX acc_id ON discount_transactions_iptraffic_all (account_id). Процесс в Вашем случае долгий, с таблички лучше сделать дамп перед началом действий.
20 гигов в месяц... а не поставить ли Вам сервер с 32 гигами оперативки под базу? У Вас народу сколько? И включена ли опция innodb_file_per_table?
Можно, конечно, и скрипты для ежедневной архивации добавить. Тогда летать будет и с 4 гигами, никуда не денется. Файлов в архиве, правда, будет немеряно. Только я не уверен, сможет ли он корректно основной отчет за текущий месяц собрать в этом случае. Надо написать да потестировать.
На тестовой тачке таблички были 8 и 9 гиг ( бэкап от 15 числа), вся операция заняла около 1.5 часа , отчеты снимает заметно быстрее, по 1 абоненту макс 3 мин., буду дальше тестить.