Может ли триггер MySQL для 100 миллионов ежедневных обновлений повлиять на производительность кластера базы данных?
У меня есть таблица MySQL (Aurora 5.7) в базе данных, в которой есть
- 700 миллионов строк
- 9 Указатели
- 25 столбцов
- 100 миллионов ежедневных обновлений
- и 5 миллионов ежедневных вставок
В целом эта таблица очень загружена, и теперь нам нужно выполнить некоторые извлечения из этой базы данных для создания отчетов.
Проблема не только в этом, но и в том, что столбец, участвующий в извлечении, не индексируется, поэтому для извлечения требуется от 5 до 6 часов.
Извлечения - это просто, в основном, мы получаем подсчеты на основе дат, которые не индексируются, и мы не можем создавать индексы, так как это может повлиять на приложение.
Поскольку у нас нет индексного запроса, выполняется полное сканирование таблицы, он влияет на кластер Aurora и нарушает репликацию глобальной базы данных.
Несмотря на то, что мы запускаем этот запрос в узлах чтения DR, он влияет на кластер, и служба поддержки и эксперты AWS также подтвердили это.
Таким образом, у нас нет возможности запускать извлечения в основной таблице, и здесь мы изучаем другие варианты.
Опция 1 :
Сделайте ежедневное восстановление снимка и запустите ежедневный отчет в новом кластере. Этот вариант выглядит очень хорошо, но проблема в том, что у нас есть база данных на 18 ТБ, и мои дополнения ежедневно будут работать от 10 до 15 часов, потому что нужно создавать 21 такой отчет, поэтому ежемесячные расходы будут близки к 7 тысячам долларов.
Вариант 2:
Делает ежедневный снимок и добавляет только необходимые таблицы для отчета в s3, а затем запускает запрос Athena.
Но проблема в том, что экспорт в S3 занимает много времени, а стоимость снова очень высока, потому что, несмотря на то, что мы экспортируем несколько таблиц из Snapshot, мы платим за полный снимок, экспорт 18 ТБ, что снова составляет 6 тысяч долларов в месяц.
Вариант 3:
Иметь триггер на этой таблице бюста и вставлять все вставки и обновления в новую таблицу, а затем запускать отчет по новой таблице.
Мне нужна помощь, чтобы решить, какой вариант лучше, и если мы выберем вариант «Триггер», то ежедневно будет 100 миллионов триггеров, и это большое количество триггеров может повлиять на базу данных?
Я также рассмотрел использование DMS в этой таблице и перемещение данных в другую таблицу, но это будет непрерывная репликация, которая снова может повлиять на кластер.
Пожалуйста, предложите.