Материализованные представления Oracle или агрегированные таблицы в хранилище данных

Являются ли материализованные представления oracle (11g) хорошей практикой для агрегированных таблиц в хранилище данных?

У нас есть процессы DW, которые заменяют данные за 2 месяца каждый день. Иногда это означает несколько гигов в месяц (~ 100 тыс. строк). Поверх них находятся материализованные представления, которые обновляются после ночного цикла передачи данных. Мой вопрос: было бы лучше создавать агрегированные таблицы вместо MV?


person Gluz    schedule 16.05.2012    source источник
comment
Было бы полезно, если бы вы могли немного объяснить, почему вы рассматриваете возможность замены MV; Я предполагаю, что какая-то проблема побуждает вас искать альтернативы, и людям было бы полезно понять, какую проблему вы пытаетесь решить.   -  person Pondlife    schedule 16.05.2012
comment
Я не уверен, что это полезно. У меня был случай (лет назад) с неудачным опытом MV в Oracle 9i. Переписывание запроса было сильно перепутано, и запросы выполнялись слишком долго. Я думаю, что это распространенный случай почти в каждом DW, и я хотел бы знать, проверял ли кто-нибудь его раньше, если он стабилен и дает лучшую производительность, чем агрегированные таблицы.   -  person Gluz    schedule 16.05.2012
comment
У вас сейчас плохая производительность и нестабильная система? Если вы это сделаете, то, конечно, вам следует разобраться в причинах, но, с другой стороны, если все работает нормально, ваше время, вероятно, лучше потратить в другом месте. Решать проблемы до того, как они возникнут, сложно :-)   -  person Pondlife    schedule 16.05.2012
comment
Из 4 часов ночной загрузки 2 часа приходится на обновление клипов. Нет проблем чем, просто хочу сделать это ближе к 2 часам.   -  person Gluz    schedule 16.05.2012


Ответы (1)


Я думаю, что один из случаев, когда агрегированные таблицы могут быть полезны, — это когда агрегирование может быть эффективно объединено с загрузкой данных на атомарном уровне, что лучше всего проиллюстрировано на примере.

Допустим, вы загружаете большой объем данных в таблицу фактов каждый день через обмен разделами. Обновление материализованного представления с использованием отслеживания изменений разделов будет запущено во время или после обмена разделами, и оно будет сканировать измененные разделы и применять изменения к MV.

Возможно, что как часть заполнения таблицы (таблиц), которую вы собираетесь обменивать с разделами таблицы фактов, вы также могли бы вычислять агрегаты на различных уровнях, используя CUBE/ROLLUP, и использовать многотабличную вставку для загрузки таблиц, которые вы можете затем разделите обмен на одну или несколько таблиц агрегации. Мало того, что это может быть по своей сути более эффективным, поскольку позволяет избежать повторного сканирования данных атомарного уровня, ваши агрегаты вычисляются до обмена разделами таблицы фактов, поэтому, если что-то пойдет не так, вы можете приостановить модификацию самой таблицы фактов.

Другие мысли могут появиться позже ... Я открою ответ как вики сообщества, если у других есть идеи.

person Community    schedule 18.05.2012