У нас есть установка Oracle 11g, которая начинает становиться большой. Эта база данных является базой для параллельной системы оптимизации, выполняемой на кластере. Ввод в процесс содержится в базе данных вместе с результатами шагов оптимизации. Вход включает в себя данные конфигурации и некоторые двоичные файлы (с использованием 11g SecureFiles). Выход включает в себя данные 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 */
Жнец script приходит каждый день и ищет случаи с DeleteFlag = 1
и переходит с DELETE FROM Case WHERE DeleteFlag = 1
, позволяя продолжить каскады.
Эта стратегия отлично работает для чтения/записи, но теперь превосходит наши возможности, когда мы хотим очистить данные! Ручка удаляет случай занимает ~ 20-40 минут в зависимости от размера и часто перегружает наше пространство архиватора. Следующая крупная версия продукта будет использовать подход "с нуля" для решения проблемы. Следующий незначительный выпуск должен оставаться в пределах данных, хранящихся в базе данных.
Итак, для младшего выпуска нам нужен подход, который может улучшить производительность удаления и, самое большее, потребует умеренных изменений в базе данных.
- REF Разделение, но вопрос КАК? Мне бы хотелось сделать INTERVAL на
Case
и REF для остальных, но это не поддерживается. Есть ли способ вручную переместитьOptimizationRun
наCaseId
через триггер? - Отключить журналы архивации/повтора для удаления? Не удалось найти СОВЕТ, чтобы пойти с этим. Не уверен, что это даже возможно.
-
Обрезать? Для этого, вероятно, потребуется какая-то сложная настройка таблицы. Но, возможно, я не рассматриваю все свои варианты.(за каждый ответ, пораженный)
Чтобы помочь проиллюстрировать проблему, данные, о которых идет речь, варьируются от 15MiB до 1.5GiB в любом месте от 20k до 2M строк.
Обновление: Текущий размер БД составляет ~ 1,5 ТБ.