Об операциях с индексом в сетиHow Online Index Operations Work

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

В этом разделе описываются возникающие во время операции с индексами структуры в сети, а также работа служб, связанных с этими структурами.This topic defines the structures that exist during an online index operation and shows the activities associated with these structures.

Структуры индексов в сетиOnline Index Structures

Для осуществления одновременной работы пользователей во время операций языка DDL необходимо во время операций с индексами в сети использовать следующие структуры: индекс источника и существующий индекс, индекс назначения, а для перестроения кучи или удаления кластеризованного индекса — временный индекс сопоставления.To allow for concurrent user activity during an index data definition language (DDL) operation, the following structures are used during the online index operation: source and pre-existing indexes, target, and for rebuilding a heap or dropping a clustered index online, a temporary mapping index.

  • Индексы источника и существующие индексыSource and pre-existing indexes

    Источник — это исходная таблица или данные кластеризованного индекса.The source is the original table or clustered index data. Существующие индексы — это любые некластеризованные индексы, связанные с исходной структурой.Pre-existing indexes are any nonclustered indexes that are associated with the source structure. Например, если операция с индексами в сети перестраивает кластеризованный индекс, с которым связаны четыре некластеризованных индекса, то источником является существующий кластеризованный индекс, а существующими индексами являются некластеризованные индексы.For example, if the online index operation is rebuilding a clustered index that has four associated nonclustered indexes, the source is the existing clustered index and the pre-existing indexes are the nonclustered indexes.

    Существующие индексы доступны пользователям для одновременных операций выборки, вставки, обновления или удаления.The pre-existing indexes are available to concurrent users for select, insert, update, and delete operations. К ним относятся операции массовой вставки (поддерживаемые, но не рекомендуемые к использованию) и неявного обновления при помощи триггеров и ограничений ссылочной целостности.This includes bulk inserts (supported but not recommended) and implicit updates by triggers and referential integrity constraints. Все существующие индексы доступны для запросов и операций поиска.All pre-existing indexes are available for queries and searches. Из этого следует, что они могут быть выбраны оптимизатором запросов и в случае необходимости заданы в указаниях индекса.This means they may be selected by the query optimizer and, if necessary, specified in index hints.

  • ЦельTarget

    Назначение или назначения являются новым индексом (или кучей) или набором новых индексов, которые были либо созданы, либо перестроены.The target or targets is the new index (or heap) or a set of new indexes that is being created or rebuilt. Пользовательские операции вставки, обновления и удаления над источником применяются к назначению компонентом Компонент SQL Server Database EngineSQL Server Database Engine во время операции с индексами.User insert, update, and delete operations to the source are applied by the Компонент SQL Server Database EngineSQL Server Database Engine to the target during the index operation. Например, если операция с индексами в сети перестраивает кластеризованный индекс, то назначением является перестроенный кластеризованный индекс; компонент Компонент Database EngineDatabase Engine не перестраивает некластеризованные индексы при перестроении кластеризованного.For example, if the online index operation is rebuilding a clustered index, the target is the rebuilt clustered index; the Компонент Database EngineDatabase Engine does not rebuild nonclustered indexes when a clustered index is rebuilt.

    При выполнении инструкции SELECT в индексе назначения не производится поиск до подтверждения операции с индексами.The target index is not searched while processing SELECT statements until the index operation is committed. Внутри системы индекс является доступным только для записи.Internally, the index is marked as write-only.

  • Временный индекс сопоставленияTemporary mapping index

    Операциям с индексами в сети, создающим, удаляющим или перестраивающим кластеризованный индекс, необходим также временный индекс сопоставления.Online index operations that create, drop, or rebuild a clustered index also require a temporary mapping index. Этот временный индекс используется одновременно выполняемыми транзакциям для определения того, какие записи должны быть удалены во время перестроения новых индексов при удалении или обновлении строк в базовой таблице.This temporary index is used by concurrent transactions to determine which records to delete in the new indexes that are being built when rows in the underlying table are updated or deleted. Данный некластеризованный индекс создается на том же этапе, что и новый кластеризованный индекс (или куча) и для него не требуется отдельной операции сортировки.This nonclustered index is created in the same step as the new clustered index (or heap) and does not require a separate sort operation. Одновременно выполняемые транзакции поддерживают временный индекс сопоставления во всех операциях вставки, обновления или удаления.Concurrent transactions also maintain the temporary mapping index in all their insert, update, and delete operations.

Работа служб в сети с использованием индексовOnline Index Activities

Во время простой операции с индексами в сети, например во время создания кластеризованного индекса в неиндексированной таблице (куче), источник и назначение проходят три фазы: подготовка, сборка и завершение.During a simple online index operation, such as creating a clustered index on a nonindexed table (heap), the source and target go through three phases: preparation, build, and final.

На следующем рисунке показан процесс создания исходного кластеризованного индекса в сети.The following illustration shows the process for creating an initial clustered index online. Для исходного объекта (кучи) другие индексы не определены.The source object (the heap) has no other indexes. Работа служб со структурами источника и назначения показана для каждой фазы; также показаны одновременные пользовательские операции выборки, вставки, обновления или удаления.The source and target structure activities are shown for each phase; concurrent user select, insert, update, and delete operations are also shown. Фазы подготовки, сборки, и завершения отображаются вместе с режимами блокировки, используемыми для каждой фазы.The preparation, build, and final phases are indicated together with the lock modes used in each phase.

Действия, выполняющиеся во время операции с индексами в сетиActivities performed during online index operation

Работа служб со структурами источникаSource Structure Activities

В следующей таблице приведена работа служб со структурами источника во время каждой фазы операции с индексами, а также соответствующие стратегии блокировки.The following table lists the activities involving the source structures during each phase of the index operation and the corresponding locking strategy.

СтадияPhase Работа служб источникаSource activity Блокировки источникаSource locks
ПодготовкаPreparation

Короткая фазаShort phase
Подготовка системных метаданных для создания пустой структуры индекса.System metadata preparation to create the new empty index structure.

Определяется моментальный снимок таблицы.A snapshot of the table is defined. То есть используется управление версиями строк для обеспечения согласованности считывания на уровне транзакций.That is, row versioning is used to provide transaction-level read consistency.

Одновременные пользовательские операции записи в источник блокируются на короткий промежуток времени.Concurrent user write operations on the source are blocked for a short period.

Запрещаются все одновременные операции DDL, кроме операции создания множества некластеризованных индексов.No concurrent DDL operations are allowed except creating multiple nonclustered indexes.
S (совмещаемая) на таблицу*S (Shared) on the table*

IS (с намерением совмещаемого доступа)IS (Intent Shared)

INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**
СборкаBuild

Главная фазаMain phase
Данные просматриваются, сортируются, сливаются и вставляются в назначение во время операций массовой загрузки.The data is scanned, sorted, merged, and inserted into the target in bulk load operations.

Одновременные пользовательские операции выборки, вставки, обновления и удаления применяются и к существовавшим индексам, и к новым создаваемым индексам.Concurrent user select, insert, update, and delete operations are applied to both the pre-existing indexes and any new indexes being built.
ISIS

INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**
ЗавершениеFinal

Короткая фазаShort phase
Все незафиксированные транзакции обновления должны быть завершены до начала этой фазы.All uncommitted update transactions must complete before this phase starts. В зависимости от полученной блокировки все новые пользовательские транзакции записи или чтения блокируются на короткий промежуток времени до завершения этой фазы.Depending on the acquired lock, all new user read or write transactions are blocked for a short period until this phase is completed.

Системные метаданные обновляются для замены источника на назначение.System metadata is updated to replace the source with the target.

При необходимости источник может быть удален.The source is dropped if it is required. Например, после перестроения или удаления кластеризованного индекса.For example, after rebuilding or dropping a clustered index.
INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**

S на таблицу в случае создания некластеризованного индекса.*S on the table if creating a nonclustered index.*

SCH-M (изменение схемы) в случае удаления любой структуры источника (индекса или таблицы).*SCH-M (Schema Modification) if any source structure (index or table) is dropped.*

* Перед установкой блокировки S или SCH-M для таблицы операция с индексами будет ожидать завершения выполнения всех незафиксированных транзакций обновления.* The index operation waits for any uncommitted update transactions to complete before acquiring the S lock or SCH-M lock on the table.

** Блокировка ресурса INDEX_BUILD_INTERNAL_RESOURCE предотвращает одновременное выполнение операций языка описания данных DDL в источнике и существовавших структурах во время выполнения операции с индексами.** The resource lock INDEX_BUILD_INTERNAL_RESOURCE prevents the execution of concurrent data definition language (DDL) operations on the source and pre-existing structures while the index operation is in progress. Например, данная блокировка предотвращает одновременное перестроение двух индексов в одной таблице.For example, this lock prevents concurrent rebuild of two indexes on the same table. Хотя данная блокировка ресурса связана с блокировкой Sch-M, она не предотвращает выполнение инструкций по обработке данных.Although this resource lock is associated with the Sch-M lock, it does not prevent data manipulation statements.

В предыдущей таблице показана одна совмещаемая (S) блокировка, установленная во время фазы сборки операции с индексами в сети, включающей в себя один индекс.The previous table shows a single Shared (S) lock acquired during the build phase of an online index operation that involves a single index. При создании или перестроении кластеризованных и некластеризованных индексов в одной операции с индексами в сети (например во время создания исходного кластеризованного индекса в таблице, содержащей один или несколько некластеризованных индексов) во время фазы сборки создаются две краткосрочные совмещаемые (S) блокировки, а затем две долгосрочные блокировки с намерением совмещаемого доступа (IS).When clustered and nonclustered indexes are built, or rebuilt, in a single online index operation (for example, during the initial clustered index creation on a table that contains one or more nonclustered indexes) two short-term S locks are acquired during the build phase followed by long-term Intent Shared (IS) locks. Одна блокировка S сначала устанавливается во время создания кластеризованного индекса, а затем при завершении его создания, а вторая краткосрочная блокировка S устанавливается при создании некластеризованных индексов.One S lock is acquired first for the clustered index creation and when creating the clustered index is completed, a second short-term S lock is acquired for creating the nonclustered indexes. После создания некластеризованных индексов блокировка S снова сменяется блокировкой IS до начала фазы завершения операции с индексами в сети.After the nonclustered indexes are created, the S lock is downgraded to an IS lock until the final phase of the online index operation.

Работа служб со структурами назначенияTarget Structure Activities

В следующей таблице приведена работа служб со структурами назначения во время каждой фазы операции с индексами, а также соответствующие стратегии блокировки.The following table lists the activities that involve the target structure during each phase of the index operation and the corresponding locking strategy.

СтадияPhase Работа служб назначенияTarget activity Блокировка назначенияTarget locks
ПодготовкаPreparation Создается новый индекс, доступный только для записи.New index is created and set to write-only. ISIS
СборкаBuild Вставляются данные из источника.Data is inserted from source.

Применяются пользовательские изменения (вставки, обновления, удаления), уже выполненные на источнике.User modifications (inserts, updates, deletes) applied to the source are applied.

Это действие прозрачно для пользователя.This activity is transparent to the user.
ISIS
ЗавершениеFinal Обновляются метаданные индекса.Index metadata is updated.

Индекс переводится в состояние чтения/записи.Index is set to read/write status.
SS

или диспетчер конфигурации службor

Блокировка SCH-MSCH-M

До завершения операции с индексами назначение не доступно для инструкций SELECT, заданных пользователем.The target is not accessed by SELECT statements issued by the user until the index operation is completed.

После выполнения фаз подготовки и завершения хранящихся в кэше процедур планы запросов и обновлений становятся недействительными.After the preparation and final phase is completed, the query and update plans that are stored in the procedure cache are invalidated. В последующих запросах используется новый индекс.Subsequent queries use the new index.

Время жизни заданного в таблице курсора, использующегося в операциях с индексами в сети, ограничено оперативными фазами индекса.The lifetime of a cursor declared on a table that is involved in an online index operation is limited by the online index phases. На каждой фазе курсоры обновления являются недействительными.Update cursors are invalidated at each phase. Доступные только для чтения курсоры становятся недействительными только после фазы завершения.Read-only cursors are invalidated only after the final phase.

Выполнение операции с индексами в сетиPerform Index Operations Online

Руководящие принципы для операций с индексамиGuidelines for Online Index Operations