Sintomas
Quando efetua operações DDL, tais como criar tabelas de índices ou truncamentos no SQL Server 2016, as operações poderão ser bloqueadas se existir outra transação DDL em execução na mesma base de dados.
Resolução
O problema foi corrigido na seguinte atualização cumulativa do SQL Server:
Recomendação: Instale a atualização cumulativa mais recente para o SQL Server
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Recomendamos que transfira e instale as atualizações cumulativas mais recentes para SQL Server:
Mais Informações
Quando uma DDL cria ou elimina uma tabela ou um índice, precisa de inserir ou eliminar o ID do conjunto de linhas da tabela ou índice dos conjuntos de sysrowsets, para os quais precisa de manter um bloqueio de linha de nível X na entrada. Quando isso é feito dentro de uma transação, o bloqueio X será mantido durante a transação.
Quando o Tuple Mover descobre buffers de exclusão liberáveis, ele precisa iterar sobre sysrowsets para descobrir tabelas ou índices existentes. Para ler cada linha de sysrowsets, ele precisa manter um bloqueio S de nível de linha na entrada que lê atualmente. O processo de descoberta é interrompido quando o Tuple Mover encontra o primeiro conjunto de linhas em que pode trabalhar. Neste ponto, o Tuple Mover fará o trabalho real de liberar o buffer de exclusão, mas para se certificar de que o conjunto de linhas descoberto ainda é válido, ele manterá um bloqueio SCH-S em todos os conjuntos de linhas avaliados durante o processo de descoberta até concluir seu trabalho.
Sysrowsets é ordenado pelo id do conjunto de linhas, portanto, pode acontecer que o Tuple Mover tenha verificado vários conjuntos de linhas existentes nos quais ele não tem ação a fazer, mas ainda manterá o bloqueio SCH-S e chegará a uma entrada em sysrowsets para a qual não pode adquirir o bloqueio S de nível de linha, porque está sendo alterado por uma transação de longa duração que mantém um bloqueio X na linha. Neste ponto, as DDLs que envolvem a alteração do id do conjunto de linhas são bloqueadas atrás dos bloqueios SCH-S do Tuple Mover.
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.