120 likes | 203 Views
Псевдосекционирование. Цель Стандартный подход при использова - нии partitioning view и его недостатки Усовершенствованный подход Псевдосекционирование – «за» и «против». Цель - «с ost- оптимизация». Секционирование требует EE . Секционирование требует Partitioning Option .
E N D
Псевдосекционирование Цель Стандартный подход при использова -нии partitioning view и его недостатки Усовершенствованный подход Псевдосекционирование – «за» и «против»
Цель - «сost-оптимизация» • Секционирование требует EE. • Секционирование требует Partitioning Option. • Разница в стоимости покупки и поддержки на • 1 год (http://orashop.ru) на 1 процессор:
Стандартный partitioning view • Отдельные таблицы-секции (например, для каждого месяца) • Констрейнты для каждой таблицы • Индекс для колонки-ключа для каждой таблицы • View, объединяющее таблицы скрипт 1
Недостатки стандартного подхода • Pruning таблиц-секций только при задании литералов в условии запросов • Необходимость построения индекса по полю секционирования при использовании bind-переменных • Лишние индексные чтения из ненужных секций. скрипт2
Усовершенствованный подход • Эффективное чтение данных с исключением ненужных «секций» • Эффективная вставка данных • Эффективное обновление и удаление • Превращение большой таблицы в «секционированную» без использования двойного объема табличного пространства.
Усовершенствованный подход:исключение секций • Идея – andrey_anonymous, sql.ru(http://sql.ru/forum/actualthread.aspx?bid=3&tid=721319&pg=2#8087522) • Добавление колонки 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 <N> • Использование shrink для уменьшения HWM исходнойтаблицы скрипт 6
«За»и«Против» • «Секционирование» в SE! • «Секционирование» в EE без расходов на лицензиипо секционированию. • Построение дополнительных и удаление ненужных индексовна отдельных «секциях» • Возможность быстрого исключения и добавления таблиц-секции во view
«За»и«Против» • Необходимость в поддержке псевдо-секционирования в коде • Сложность плана(требуется больше памяти в library cache) • Накладные расходы при обновлении и удалении данных через instead of trigger • Проблемы со сложными запросами • Сложности при использовании хинтов
Выводы • Считайте • Взвешивайте все«за» и «против» • Тестируйте