Построение индексов – часть 6: построение секционированного индекса (Продолжение – Невыровненные индексы)
Параллельное построение невыровненных секционированных индексов (продолжение)
Базовая таблица секционирована, с использованием другой схемы секционирования, чем индекс:
Секционированная базовая таблица и секционированный индекс являются невыровненными если используют различные схемы секционирования или (как в примере ниже) секционированы по разным колонкам.
Пример:
Create Partition Function pf (int)
as range right for values (1, 100, 1000)
Create Partition Scheme ps as Partition pf
TO ([PRIMARY], [FG1], [FG2], [FG3])
Create table t (c1 int, c2 int)
on ps(c2)
Create clustered Index idx_t on t(c1)
on ps(c1)
Последовательный план построения невыровненного индекса выглядит следующим образом:
Построитель
|
Сортировка
|
NL
/ \
ПТС Сканирование
ПТС: Постоянный табличный скан (задача ПТС – предоставить ID секций построителю)
NL: Nested Loop (вложенный цикл)
ПТС предоставляет ID секций внутренней стороне Nested Loop-а, который строит индекс для каждой секции. В остальном, план выглядит точно также как в случае с несекционированной базовой таблицей (см. предыдущий пост). Соответственно, требования к памяти и дисковому пространству – те же.
В случае параллельного построения:
X(обмен)
|
Сортировка
|
X (обмен – ре-секционирование)
|
NL
/ \
X Сканирование
/
ПТС
Итератор обмена выше ПТС (Х) получает данные о ID секций и подает их внутренней стороне Nested Loop-а. Между этой точкой и ре-секционированием каждый исполнитель получает 0-N секций в зависимости от распределения данных.
Ре-секционирование делит план построения индекса на две параллельно исполняемые части: различные исполнители выполняют работу до и после ре-секционирования. Каждый исполнитель получает №Секций /DOP (здесь имеется ввиду секций в строимом индексе, не в базовой таблице). Информация о секциях строимого индекса «спускается» итератору обмена – ре-секционирования, которые перераспределяет данные между промежуточными структурами сортировки. В остальном, план выглядит точно также как в случае с несекционированной базовой таблицей (см. предыдущий пост). Соответственно, опять таки, требования к памяти и дисковому пространству – те же.
Читайте в следующих постах о фоновом построении индексов(Online Index Build) J