Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
В этой статье определяются структуры, которые существуют во время операции индекса в сети и отображаются действия, связанные с этими структурами.
Структуры индексов в сети
Чтобы разрешить одновременную активность пользователей во время операции языка определения данных индекса (DDL), во время операции с индексом в сети используются следующие структуры: исходные и существующие индексы, целевые объекты, а также для перестроения кучи или удаления кластеризованного индекса в сети, временного индекса сопоставления.
Исходные и существующие индексы
Источник — это исходная таблица или данные кластеризованного индекса. Существующие индексы — это все некластеризованные индексы, связанные с исходной структурой. Например, если операция сетевого индекса перестраивает кластеризованный индекс с четырьмя связанными некластеризованными индексами, источник является существующим кластеризованным индексом, а существующие индексы являются некластеризованными индексами.
Существующие индексы доступны одновременным пользователям для операций выбора, вставки, обновления и удаления. Сюда входят массовые вставки (поддерживаемые, но не рекомендуемые во время операции индекса в сети) и неявные обновления триггерами и ограничениями целостности ссылок. Для запросов доступны все существующие индексы. Это означает, что они могут быть выбраны оптимизатором запросов и, при необходимости, указаны в указаниях индекса.
Target
Назначение или назначения являются новым индексом (или кучей) или набором новых индексов, которые были либо созданы, либо перестроены. Операции вставки, обновления и удаления данных в исходной базе данных применяются СУБД к целевому объекту во время индексации. Например, если операция сетевого индекса перестроит кластеризованный индекс, целевой объект является перестроенным кластеризованным индексом; Ядро СУБД не перестраивает некластеризованные индексы при перестроении кластеризованного индекса.
Целевой индекс не используется до подтверждения операции индексации. Внутри системы индекс является доступным только для записи.
Временный индекс сопоставления
Операциям с индексами в сети, создающим, удаляющим или перестраивающим кластеризованный индекс, необходим также временный индекс сопоставления. Этот временный индекс используется параллельными транзакциями для определения записей, которые необходимо удалить в новых индексах, создаваемых при обновлении или удалении строк в исходной таблице. Этот некластеризованный индекс создается на том же шаге, что и новый кластеризованный индекс (или куча) и не требует отдельной операции сортировки. Параллельные транзакции поддерживают временный индекс сопоставления во всех операциях вставки, обновления и удаления.
Действия индекса в Сети
Во время операции с индексом в сети, например создание кластеризованного индекса в неиндексной таблице (куче), исходный и целевой объект проходят три этапа: подготовка, сборка и окончательный.
Расширенное progress_report_online_index_operation событие можно использовать для мониторинга хода выполнения операции создания онлайн-индекса.
На следующем рисунке показан процесс создания исходного кластеризованного индекса в сети. Для исходного объекта (кучи) другие индексы не определены. Для каждого этапа отображаются действия исходной и целевой структур, а также операции пользователей SELECT, INSERT, UPDATE и DELETE. Фазы подготовки, сборки, и завершения отображаются вместе с режимами блокировки, используемыми для каждой фазы.
Действия исходной структуры
В следующей таблице приведена работа служб со структурами источника во время каждой фазы операции с индексами, а также соответствующие стратегии блокировки.
| Phase | Исходное действие | Блокировки исходного кода |
|---|---|---|
|
Preparation Короткий этап |
Подготовка системных метаданных для создания пустой структуры индекса. Определяется моментальный снимок таблицы. То есть используется управление версиями строк для обеспечения согласованности считывания на уровне транзакций. Одновременные пользовательские операции записи в источник блокируются на короткий промежуток времени. Запрещаются все одновременные операции DDL, кроме операции создания множества некластеризованных индексов. |
Разделяемые (S) в таблице1Общие намерения ( IS)Блокировка объекта изменения Sch-M схемы с подтипом INDEX_OPERATION ресурса 2 |
|
Build Основной этап |
Данные сканируются, сортируются, объединяются и вставляются в целевой объект с помощью операций массовой загрузки. Одновременные операции пользователей INSERT, UPDATE, DELETE и MERGE применяются как к существующим индексам, так и к новым индексам, находящимся в процессе построения. |
Общие намерения (IS)Sch-Mблокировка объекта с ресурсным подтипом INDEX_OPERATION2 |
|
Final Короткий этап |
Все незафиксированные транзакции записи должны завершиться до начала этого этапа. В зависимости от полученной блокировки все новые транзакции чтения или записи пользователя блокируются в течение короткого периода до завершения этого этапа. Системные метаданные обновляются для замены источника на назначение. Источник удаляется при необходимости, например после перестроения или удаления кластеризованного индекса. |
Sch-Mблокировка объекта с ресурсным подтипом INDEX_OPERATION2Общий ( S) в таблице при создании некластеризованного индекса.1Sch-M Если любая исходная структура (индекс или таблица) удаляется. 1 |
1 Операция индексирования ожидает завершения любых незафиксированных транзакций записи перед получением блокировки S или Sch-M на таблице. Если выполняется длительный запрос, операция с индексами в сети ожидает завершения запроса. Если не используются блокировки с низким приоритетом, это может сформировать цепочку блокировок.
2 Блокировка Sch-M объекта с подтипом INDEX_OPERATION ресурса предотвращает выполнение параллельных операций языка определения данных (DDL) в исходной и предварительной структуре во время выполнения операции индекса. Например, данная блокировка предотвращает одновременное перестроение двух индексов в одной таблице. Хотя это блокировка Sch-M, она не предотвращает операторы манипуляции данными.
В предыдущей таблице показана одна общая блокировка (S), полученная во время создания операции онлайн-индекса, включающей один индекс. При создании кластеризованных и некластеризованных индексов или их перестроении в рамках одной онлайн индексной операции (например, во время первоначального создания кластеризованного индекса в таблице, содержащей один или несколько некластеризованных индексов), две краткосрочные S блокировки получаются во время этапа сборки, за которым следует долгосрочная блокировка с намерением (IS). Первая S блокировка приобретается для создания кластеризованного индекса. Когда создается кластеризованный индекс, для создания некластеризованных индексов приобретается вторая краткосрочная блокировка S. После создания некластеризованных индексов блокировка S будет понижена до блокировки IS до окончательной фазы операции индекса в онлайн режиме.
Дополнительные сведения об использовании блокировок и способах их управления см. в WAIT_AT_LOW_PRIORITY при операциях с индексами в режиме онлайн.
Деятельность целевой структуры
В следующей таблице приведена работа служб со структурами назначения во время каждой фазы операции с индексами, а также соответствующие стратегии блокировки.
| Phase | Целевое действие | Целевые блокировки |
|---|---|---|
| Preparation | Создается новый индекс, доступный только для записи. | Общие намерения (IS) |
| Build | Вставляются данные из источника. Изменения пользователей (вставки, обновления, удаления), примененные к источнику, также применяются к целевому объекту. Это действие прозрачно для пользователя. |
Общие намерения (IS) |
| Final | Обновляются метаданные индекса. Для индекса задано состояние чтения и записи. |
Совместное использование (S) или изменение схемы (Sch-M) |
Целевой объект недоступен для пользовательских запросов до завершения операции индексации.
После завершения подготовки или окончательного этапа планы запросов, хранящиеся в кэше планов, могут быть недействительными.
Время жизни заданного в таблице курсора, использующегося в операциях с индексами в сети, ограничено оперативными фазами индекса. На каждой фазе курсоры обновления являются недействительными. Доступные только для чтения курсоры становятся недействительными только после фазы завершения.