Não vejo por que uma reconstrução de índice exigiria um bloqueio Sch-M no índice fornecido.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
A documentação de Como funcionam as operações de índice online diz:
Isso é especificamente para operações online. Se você está perguntando sobre operações offline, a lógica é a mesma: nada pode estar acessando uma estrutura que está prestes a ser descartada , nem mesmo sob
Sch-S
apenas, ou para uso interno dentro de uma transação do sistema. Observe também o "(índice ou tabela)" lá, portanto, isso se aplica a todos os índices (incluindo clusters) e tabelas de heap.Há algum tempo, a
Sch-M
restrição era aplicada ao criar uma visualização indexada. Isso foi apontado como desnecessário (link de conexão não está mais disponível) porque nenhuma estrutura estava sendo descartada, apenas criada, então o comportamento foi alterado (para apenas pegarSch-S
eTab-S
).Também relacionado da documentação :
A partir do mesmo link, o SQL Server 2012 introduziu a capacidade de adicionar uma
NOT NULL
coluna sem demorarSch-M
, desde que o valor padrão seja uma constante de tempo de execução . Menciono isso porque mostra como o SQL Server evoluiu para reduzir o bloqueio desnecessariamente restritivo sempre que possível. Se você encontrar um caso específico em que considereSch-M
realmente desnecessário, poderá fazer a sugestão no site de comentários da Microsoft .Além disso, em Unicórnios, arco-íris e operações de índice online , Paul Randal diz:
Links Relacionados:
Os bloqueios de modificação de esquema(
Sch-M
) são adquiridos quando ocorrem alterações de metadados .No caso de
index rebuild
(online
ouoffline
) uma nova cópia de umindex
é construída e a antigaindex
é descartada. Antes de descartar um índice antigo, os metadados da tabela precisam ser atualizados.Portanto, no estágio final da reconstrução do índice, o
Sch-M
bloqueio é obtido para substituir uma referência de índice no arquivometadata
.ATUALIZAR
Responda ao comentário
OK. Aqui está minha nova reprodução: