У нас есть установка Oracle 11g, которая начинает расти.Эта база данных является бэкендом для параллельной системы оптимизации, работающей в кластере.Входные данные для процесса содержатся в базе данных вместе с выходными данными шагов оптимизации.Входные данные включают в себя данные конфигурации rote и некоторые двоичные файлы (с использованием SecureFiles 11g).Выходные данные включают в себя данные 1D, 2D, 3D и 4D, которые в настоящее время хранятся в БД.
Структура БД:
/* Metadata tables */
Case(CaseId, DeleteFlag, ...) On Delete Cascade CaseId
OptimizationRun(OptId, CaseId, ...) On Delete Cascade OptId
OptimizationStep(StepId, OptId, ...) On Delete Cascade StepId
/* Data tables */
Files(FileId, CaseId, Blob) /* deletes are near instantateous here */
/* Data per run */
OnedDataX(OptId, ...)
TwoDDataY1(OptId, ...) /* packed representation of a 1D slice */
/* Data not only per run, but per step */
TwoDDataY2(StepId, ...) /* packed representation of a 1D slice */
ThreeDDataZ(StepId, ...) /* packed representation of a 2D slice */
FourDDataZ(StepId, ...) /* packed representation of a 3D slice */
/* ... About 10 or so of these tables exist */
Сценарий жнеца приходит ежедневно и ищет случаи с DeleteFlag = 1
и переходит к DELETE FROM Case WHERE DeleteFlag = 1
, что позволяет каскадам продолжаться.
Эта стратегия отлично работает для чтения / записи, но теперь она превосходит наши возможности, когда мы хотим очистить данные!Проблема удаления кейса занимает ~ 20-40 минут в зависимости от размера и часто перегружает пространство нашего архиватора.Следующая основная версия продукта будет использовать «с нуля» подход к решению проблемы.Следующий вспомогательный выпуск должен находиться в пределах данных, хранящихся в базе данных.
Таким образом, для вспомогательного выпуска необходим подход, который может улучшить производительность удаления и в большинстве случаев потребовать умеренных изменений в базе данных.
- REF Partitioning, но вопрос в том, КАК?Я хотел бы сделать INTERVAL для
Case
и REF для остальных, , но это не поддерживается .Есть ли способ вручную разделить OptimizationRun
на CaseId
через триггер? - Отключить архивирование / повтор журналов для удалений?Не удалось найти подсказку, чтобы пойти с этим.Не уверен, что это даже возможно.
- Усечь?Это, вероятно, потребует некоторой сложной настройки таблицы.Но, возможно, я не рассматриваю весь свой вариант. (за ответ, поражен)
Чтобы проиллюстрировать проблему, данные в каждом случае варьируются отОт 15 МБ до 1,5 ГБ с количеством строк от 20 до 2 МБ.
Обновление: Текущий размер БД составляет ~ 1,5 ТБ.