Вы можете просто создать таблицу для хранения метрик, значений, которые вы в настоящее время извлекаете вместе с отметкой времени
INSERT INTO table_metrics(index_length, table_name, auto_increment, row_count, when)
SELECT INDEX_LENGTH, TABLE_NAME, AUTO_INCREMENT, TABLE_ROWS, now()
FROM information_schema.TABLES
;
и затем выполните запрос к этим данным
SELECT table_name
, il_change / daysPassed AS ilGrowthRate
, ([literal ceiling value] - il_current) / (il_change / daysPassed) AS daysRemaining
, ...
FROM (
SELECT table_name
, MAX(index_length) AS il_current
, MAX(index_length) - MIN(index_length) AS il_change
, ....
, DATEDIFF(MAX(when), MIN(when)) AS daysPassed
GROUP BY table_name
) AS subQ
Предполагается, что вы удаляете данные для таблицы при ее усечении, чтобы метрики начинались заново, когда таблица выполняется; Вы можете, конечно, добавить условия, чтобы просматривать показатели только за последний день, неделю, месяц и т. д. (в этом случае сокращение таблицы показателей после очистки становится менее важным).