Псевдосекционирование Цель Стандартный подход при использова - нии partitioning view и его недостатки Усовершенствованный подход Псевдосекционирование – «за» и «против»
Цель - «сost-оптимизация» ВерсияЦена покупки (техподд. 1 год ) Техподдержка в год EE + partitioning$ $12980 SE$ $ 3850 SE One $ $ 1276 Секционирование требует EE. Секционирование требует Partitioning Option. Разница в стоимости покупки и поддержки на 1 год ( ) на 1 процессор:
Стандартный partitioning view Отдельные таблицы-секции (например, для каждого месяца) Констрейнты для каждой таблицы Индекс для колонки-ключа для каждой таблицы View, объединяющее таблицы скрипт 1
Недостатки стандартного подхода Pruning таблиц-секций только при задании литералов в условии запросов Необходимость построения индекса по полю секционирования при использовании bind-переменных Лишние индексные чтения из ненужных секций. скрипт 2
Усовершенствованный подход Эффективное чтение данных с исключением ненужных «секций» Эффективная вставка данных Эффективное обновление и удаление Превращение большой таблицы в «секционированную» без использования двойного объема табличного пространства.
Усовершенствованный подход : исключение секций Идея – andrey_anonymous, sql.ru ( Добавление колонки view со значением- константой Особенности планов запросов Демонстрация эффективности исключения «секций» скрипт 3
Усовершенствованный подход : эффективная вставка данных Multitable insert в процедуре вставки: insert first when … then insert into tbl1 when … then insert into tbl2 when … then insert into max_tbl Select i_arg1, i_arg2, … from dual; скрипт 4
Усовершенствованный подход: обновление и удаление строк Добавление колонки с ROWID Добавление колонки с названием таблицы Использование instead of trigger Процедуры обновления и удаления данных с доступом по ROWID Снижение эффективности при массовой обработке данных (срабатывание строчного триггера). Среды OLTP и DWH. скрипт 5
Эффективный перенос данных при секционировании Обработка исходной таблицы по экстентам или диапазонам ROWID Перенос данных от последнего экстента к первому Delete данных из обработанного экстента. Не хватает truncate table TBL extent Использование shrink для уменьшения HWM исходной таблицы скрипт 6
«За» и «Против» «Секционирование» в SE! «Секционирование» в EE без расходов на лицензии по секционированию. Построение дополнительных и удаление ненужных индексов на отдельных «секциях» Возможность быстрого исключения и добавления таблиц-секции во view
«За» и «Против» Необходимость в поддержке псевдо - секционирования в коде Сложность плана (требуется больше памяти в library cache) Накладные расходы при обновлении и удалении данных через instead of trigger Проблемы со сложными запросами Сложности при использовании хинтов
Выводы Считайте Взвешивайте все «за» и «против» Тестируйте