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