Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Este artigo define as estruturas que existem durante uma operação de índice online e mostra as atividades associadas a essas estruturas.
Estruturas de índice online
Para permitir a atividade simultânea do usuário durante uma operação DDL (linguagem de definição de dados de índice), as seguintes estruturas são usadas durante a operação de índice online: índices de origem e preexistentes, destino e para reconstruir uma pilha ou descartar um índice clusterizado online, um índice de mapeamento temporário.
Origem e índices preexistentes
A origem é a tabela original ou os dados de índice agrupados. Os índices preexistentes são quaisquer índices não agrupados associados à estrutura de origem. Por exemplo, se a operação de índice online estiver reconstruindo um índice clusterizado que tenha quatro índices não clusterizados associados, a origem será o índice clusterizado existente e os índices preexistentes serão os índices não clusterizados.
Os índices preexistentes estão disponíveis para usuários simultâneos para operações de seleção, inserção, atualização e exclusão. Isso inclui inserções em massa (suportadas, mas não recomendadas durante uma operação de índice online) e atualizações implícitas por gatilhos e restrições de integridade referencial. Todos os índices preexistentes estão disponíveis para consultas. Isso significa que eles podem ser selecionados pelo otimizador de consulta e, se necessário, especificados em dicas de índice.
Target
O destino ou destinos é o novo índice (ou heap) ou um conjunto de novos índices que está a ser criado ou reconstruído. As operações de inserção, atualização e eliminação efetuadas pelo utilizador na origem são aplicadas pelo motor de base de dados ao destino durante o processo de indexação. Por exemplo, se a operação de índice online estiver reconstruindo um índice clusterizado, o destino será o índice clusterizado reconstruído; o Mecanismo de Banco de Dados não recria índices não clusterizados quando um índice clusterizado é reconstruído.
O índice de destino não é usado até que a operação de indexação seja confirmada. Internamente, o índice é marcado como somente gravação.
Índice de mapeamento temporário
As operações de índice online que criam, descartam ou recriam um índice clusterizado também exigem um índice de mapeamento temporário. Esse índice temporário é usado por transações simultâneas para determinar quais registros devem ser excluídos nos novos índices que estão sendo criados quando as linhas na tabela de origem são atualizadas ou excluídas. Esse índice não clusterizado é criado na mesma etapa que o novo índice clusterizado (ou heap) e não requer uma operação de classificação separada. As transações simultâneas mantêm o índice de mapeamento temporário em todas as suas operações de inserção, atualização e exclusão.
Atividades de índice online
Durante uma operação de índice online, como a criação de um índice clusterizado em uma tabela não indexada (heap), a origem e o destino passam por três fases: preparação, compilação e final.
Você pode usar o progress_report_online_index_operation evento estendido para monitorar o progresso de uma operação de índice online.
A ilustração a seguir mostra o processo de criação de um índice clusterizado inicial online. O objeto de origem (o heap) não tem outros índices. As atividades da estrutura de origem e de destino são mostradas para cada fase; operações simultâneas de utilizador SELECT, INSERT, UPDATE e DELETE também são mostradas. As fases de preparação, construção e final são indicadas juntamente com os modos de bloqueio usados em cada fase.
Atividades de estrutura de fonte
A tabela a seguir lista as atividades que envolvem as estruturas de origem durante cada fase da operação de índice e a estratégia de bloqueio correspondente.
| Phase | Atividade de origem | Bloqueios de fonte |
|---|---|---|
|
Preparation Fase curta |
Preparação de metadados do sistema para criar a nova estrutura de índice vazia. Um instantâneo da tabela é definido. Ou seja, o versionamento de linha é usado para fornecer consistência de leitura ao nível de transação. As operações de escrita simultâneas do utilizador na origem são bloqueadas por um curto período. Nenhuma operação DDL simultânea é permitida, exceto a criação de vários índices não clusterizados. |
Partilhado (S) na tabela1Intenção compartilhada ( IS)Bloqueio de modificação de esquema ( Sch-M) de objeto com o subtipo de recurso INDEX_OPERATION2 |
|
Build Fase principal |
Os dados são verificados, classificados, mesclados e inseridos no destino usando operações de carregamento em massa. Usuário simultâneo INSERT, UPDATE, DELETE e MERGE operações são aplicadas tanto aos índices preexistentes quanto a quaisquer novos índices que estão a ser criados. |
Intenção compartilhada (IS)Sch-M bloqueio de objeto com o subtipo de recurso INDEX_OPERATION2 |
|
Final Fase curta |
Todas as transações de gravação não confirmadas devem ser concluídas antes do início desta fase. Dependendo do bloqueio adquirido, todas as transações de leitura ou gravação do novo usuário são bloqueadas por um curto período até que essa fase seja concluída. Os metadados do sistema são atualizados para substituir a origem pelo destino. A origem é descartada se necessário, por exemplo, depois de reconstruir ou descartar um índice clusterizado. |
Sch-M bloqueio de objeto com o subtipo de recurso INDEX_OPERATION2Compartilhado ( S) na tabela se estiver criando um índice não clusterizado.1ºSch-M se qualquer estrutura de origem (índice ou tabela) for descartada.1 |
1 A operação de índice aguarda a conclusão de quaisquer transações de gravação não confirmadas antes de adquirir o S bloqueio ou o Sch-M bloqueio na tabela. Se uma consulta de longa execução estiver ocorrendo, a operação de índice online aguardará até que a consulta seja concluída. A menos que sejam usados bloqueios de baixa prioridade, isso pode formar uma cadeia de bloqueio.
2 Um Sch-M bloqueio de objeto com o subtipo INDEX_OPERATION de recurso impede a execução de operações DDL (linguagem de definição de dados) simultâneas na origem e estruturas preexistentes enquanto a operação de índice está em andamento. Por exemplo, esse bloqueio impede a reconstrução simultânea de dois índices na mesma tabela. Embora este seja um Sch-M bloqueio, não impede instruções de manipulação de dados.
A tabela anterior mostra um único bloqueio compartilhado (S) adquirido durante a fase de construção de uma operação online de índice que envolve um único índice. Quando índices clusterizados e não clusterizados são criados ou reconstruídos em uma única operação de índice online (por exemplo, durante a criação inicial de índice clusterizado em uma tabela que contém um ou mais índices não clusterizados), dois bloqueios de curto prazo S são adquiridos durante a fase de compilação, seguidos por bloqueios compartilhados de intenção de longo prazo (IS). Um S bloqueio é adquirido primeiro para a criação do índice agrupado. Quando o índice clusterizado é criado, um segundo bloqueio de curto prazo S é adquirido para criar os índices não clusterizados. Depois que os índices não clusterizados são criados, o S bloqueio é rebaixado para um IS bloqueio até a fase final da operação de índice online.
Para obter mais informações sobre como os bloqueios são usados e como você pode gerenciá-los, consulte WAIT_AT_LOW_PRIORITY com operações de índice online.
Atividades da Estrutura-Alvo
A tabela a seguir lista as atividades que envolvem a estrutura de destino durante cada fase da operação de índice e a estratégia de bloqueio correspondente.
| Phase | Atividade-alvo | Bloqueios de alvo |
|---|---|---|
| Preparation | Um novo índice é criado e configurado como apenas para gravação. | Intenção compartilhada (IS) |
| Build | Os dados são inseridos a partir da fonte. As modificações do usuário (inserções, atualizações, exclusões) aplicadas à origem também são aplicadas ao destino. Esta atividade é transparente para o utilizador. |
Intenção compartilhada (IS) |
| Final | Os metadados do índice são atualizados. O índice é definido para o estado de leitura/gravação. |
Modificação compartilhada (S) ou de esquema (Sch-M) |
O destino não é acessado por consultas do usuário até que a operação de índice seja concluída.
Após a conclusão da preparação ou da fase final, os planos de consulta armazenados no cache do plano podem ser invalidados.
O tempo de vida de um cursor declarado em uma tabela envolvida em uma operação de índice online é limitado pelas fases de índice online. Os cursores de atualização são invalidados em cada fase. Os cursores somente leitura são invalidados somente após a fase final.