16.1.23

Построение индексов – Часть 4. Параллельное, автономное построение несекционированного индекса (Offline, Parallel, No Partitioning)


http://blogs.technet.com/lyudmila_fokina/archive/2006/09/26/458993.aspx


Людмила Фокина

Существует 3 основных категории паралльных планов построения индекса:

  1. Интервальное секционирование (для машин малой мощности);
  2. Интервальное секционирование (для высокопроизводительных машин);
  3. План для индексирования представления без гистограм (No histogram Indexed view).

 Интервальное секционирование* (для машин малой мощности).

Схематично параллельный план построения индекса для машин малой мощности можно представить следующим образом: 

     X

/                |                \

Построитель… Построитель …  Построитель …  

|                  |                 |

Сортировка… Сортировка …  Сортировка …

\                 |                /

Сканирование (для каждого исполнителя (worker))

 

Этот план параллельного построения индексов выбирается обработчиком запросов когда выполняются следующие условия:

1)      Уровень параллелизма (DOP – Degree of parallelism) – число процессоров, которые могут быть использованны для построения индекса < 8 или DOP > 8, но память требуемая для постоения индекса превышает определенный % общей доступной обработчику запросов памяти (см. в следущем посте - интервальное секционирование (для высокопроизводительных машин));

2)      Доступна статистика (в общем-то, все случаи, кроме индекситрованных представлений, дают возможность получить статистику; если она не существует на момент создания индекса, она будет сгенерирована).

Используя имеющуюся статистику обработчик запросов распределяет данные на N сегментов, где N = DOP * 3. Зная оценочное число строк для каждого сегмента объем работ делится на DOP секций между исполнителями – по одной секции на исполнителя (это делается для выравнивания нагрузки). Используя секционное сканирование каждый исполнитель получает данные принадлежащие к его секции, хотя для этого и приходится сканировать все данные для каждого исполнителя, т.е., если, например, DOP = 4, вся таблица будет просканирована 4 раза.

Каждый исполнитель строит свое собственное дерево используя данные своей секции, таким образом каждый исполнитель будет иметь свою собственную промежуточную структуру сортировки.

После построения деревьев каждым исполнителем, координирующий процесс осуществляет «сшивку» всех деревьев в общее дерево индекса. После «сшивки» генерируется полная статистика для нового индекса и процесс завершается.

* Не путайте, пожалуйста, «интервальное секционирование (Range partition)» - тип параллельного плана построения индекса и «секционированный индекс (Partitioned Index)» - тип индекса.

В следующих сообщениях:

- Интервальное секционирование (для высокопроизводительных машин);

- План для индексирования представления;

- Требования к памяти при парллельном построении индексов;

...

Комментариев нет:

Отправить комментарий