Criei um índice não clusterizado em um servidor ativo (SQL Server 2008 R2) e acabou não fornecendo os benefícios de desempenho que eu esperava. Então, eu quero excluir o índice novamente.
Infelizmente, não consigo bloquear o índice, pois ele está em uso. Provavelmente estará sempre em uso. Reiniciar o SQL Server não é realmente uma opção.
Eu também tive esse mesmo problema no passado quando quis reconstruir um índice e tive que contornar o problema reorganizando (o que às vezes é muito ineficiente).
Existe alguma maneira de dizer ao SQL Server para parar de usar um índice? Ou é possível executar uma consulta que tentará obter um bloqueio exclusivo no índice, aguardar indefinidamente e excluir o índice? Quaisquer outras opções? Ou devo apenas esperar até que haja algum tipo de interrupção e, em seguida, espero me lembrar de removê-lo antes que tudo volte a ficar online?
Isso seria desabilitar um índice:
Mas também haverá problemas de simultaneidade em um objeto altamente transacional, pois a operação acima ainda requer um bloqueio de modificação de esquema (Sch-M) no objeto.
Esse seria o comportamento padrão do SQL Server. O único "tempo limite de comando" será aplicado pelo software do lado do cliente. Vou assumir que você está usando algum tipo de GUI para tentar excluir/desativar o índice (talvez SSMS?). De qualquer forma, se você colocar isso em uma nova janela de consulta (SSMS), ele aguardará indefinidamente até que o recurso bloqueado fique disponível para que possa receber o bloqueio necessário:
Esta é uma das razões pelas quais é quase sempre mais fácil fazer esses tipos de operações durante um período lento ou uma janela de manutenção. Isso normalmente garante pouca ou nenhuma atividade do usuário, tornando essas tarefas simples...simples e rápidas.
E se você quiser ver o que/quem sua solicitação de queda de índice está esperando, você pode executar uma consulta semelhante a esta: