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)
Завтра
напишу про секционированные / несекционированные индексы.
Комментариев нет:
Отправить комментарий