16.1.23

Запоздалое вступление - Типы построения индексов - Часть 1

http://blogs.technet.com/lyudmila_fokina/archive/2006/11/21/523219.aspx


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

Коллеги! Мне тут было сделано справедливое замечание (offline J), что я начала рассказывать о различных планах построения индексов, не дав краткого предварительного обзора того, какие типы индексов (с точки зрения их построения) существуют и чем они отличаются. Например, фоновое построение индекса и секционированные индексы – это новые возможности SQL Server 2005, и не у всех была возможность с ними уже ознакомиться.

Исправляюсь, и публикую небольшой обзор:

-          Фоновое построение индекса или Автономное построение индекса:

В SQL Server 2005, вы можете создать, перестроить или удалить (удалить - только кластерный) индекс в фоновом (оперативном) режиме. Параметр ONLINE (ONLINE = ON) разрешает одновременный доступ пользователей к базовой таблице или данным кластеризованного индекса и всем связанным некластеризованным индексам во время выполнения этих операций с индексами. Например, пока пользователь перестраивает кластеризованный индекс, он и другие пользователи могут продолжать обновление базовых данных и осуществлять к ним запросы. При выполнении DDL-операций в автономном режиме (ONLINE = OFF – установка по умолчанию), таких как построение или перестроение кластеризованного индекса, эти операции удерживают монопольные блокировки на базовые данные и связанные индексы.

Рекомендуется выполнять оперативные операции с индексами в производственной среде, работающей 24 часа в сутки и семь дней в неделю, когда имеется насущная необходимость одновременных действий пользователей во время выполнения операций с индексами.

Пример:

Create index idx_t on t(c1, c2)

WITH (ONLINE = ON)

 

-         Последовательное построение индекса или  Параллельное построение индекса:

На многопроцессорных компьютерах при построении индексов могут использовать больше процессоров для выполнения сканирования и сортировки, связанных с построением индекса. Число процессоров, задействованных при выполнении одной индексной инструкции, определяется параметром конфигурации max degree of parallelism (устанавливается системной процедурой sp_configure: по умолчанию = 0 – использовать все доступные процессоры), опцией MAXDOP (устанавливается командой Create Index или Alter Index) , текущей рабочей нагрузкой и, в случае несекционированного индекса, распределением данных в первой ключевой колонке. Параметр max degree of parallelism ограничивает число процессоров, используемых при параллельном выполнении плана. Иными словами, он устанавливает потолок – использовать не больше данного числа процессоров, но можно меньше (исключение MAXDOP = 0 – использовать все доступные процессоры). Если компонент SQL Server определяет, что система загружена, степень параллелизма индексной операции автоматически уменьшается перед началом выполнения инструкции.

Пример:

Create index idx_t on t(c1, c2)

WITH (MAXDOP = 2)

-- ограничивает # используемых процессоров до 2.

 

      -         Построение Индекса с использованием пользовательской базы данных для хранения промежуточных результатов сортировки или с использованием   tempdb (SORT_IN_TEMPDB):

Я уже писала об этом в одном из предыдущих постов. Вкратце повторюсь.

При создании или перестроении индекса можно установить параметр SORT_IN_TEMPDB в значение ON, чтобы указать SQL Server базу tempdb для хранения промежуточных результатов сортировки, которые используются для построения индекса. Данный параметр увеличивает место на диске, временно занимаемое при построении индекса, но с его помощью можно сократить время, необходимое для создания или перестройки индекса (смотри сентябрьский пост «Использование опции sort_in_tempdb»). По умолчанию, данные промежуточной сортировки хранятся в той же базе данных, в которой находится индексируемая таблица.

Пример:

Create clustered Index idx_t on t(c1)

WITH (SORT_IN_TEMPDB = ON) 

Завтра напишу про секционированные / несекционированные индексы.

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

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