Quando o trabalho dbo.IndexOptimize está em execução por muito tempo e causando bloqueio, se interrompermos o trabalho, isso causa reversão de tudo que foi reorganizado ou reconstruído? Ou simplesmente para onde está e não prossegue?
Estamos usando o SQL Server 2017 Enterprise Edition com um grupo de disponibilidade Always On.
Conforme afirmado por outros nos comentários, se um índice tiver sido otimizado pelo trabalho IndexOptimize, os bloqueios que ocorrem nesse índice também chegarão ao fim. (Exceto, é claro, novas transações que mantêm bloqueios no índice)
Respondendo as suas perguntas
A interrupção do trabalho IndexOptimize resultará na exibição de uma mensagem de erro:
Mas se você encerrar o processo que está atualmente executando a manutenção do índice, isso resultará na reversão do índice atual que está sendo otimizado.
Os índices previamente otimizados não são afetados. Apenas o índice atual está sendo otimizado.
Como você escreveu que esta é uma tabela/índice grande, o processo de reversão pode levar o mesmo tempo que já foi usado para otimizar/reconstruir o índice.
Edição Empresarial
Visto que você está usando a Enterprise Edition do Microsoft SQL Server 2017, talvez você queira aplicar o
INDEX_REBUILD_ONLINE
parâmetro em seuIndexOptimize
trabalho (... do Ola). Usar esta opção dirá ao trabalho de Ola para acionar aWITH (ONLINE=ON)
opção.É explicado no artigo da Microsoft Executar operações de índice online como:
O parâmetro acionado é exibido na documentação ALTER INDEX no site do Microsoft Learn.
Sua etapa de trabalho para o trabalho OLA IndexOptimize poderia então ser semelhante à seguinte:
Basicamente, isso diz ao trabalho para executar o seguinte:
ALTER INDEX ... REORGANIZE ...
ALTER INDEX ... REBUILD ... WITH (ONLINE = ON)...
. Se o índice não puder ser reconstruído online, basta reorganizar o índice.ALTER INDEX ... REBUILD ... WITH (ONLINE = ON)...
. Se o índice não puder ser reconstruído on-line, execute umALTER INDEX ... REBUILD ... WITH (ONLINE = OFF) ...
.Isso deve permitir que sua Enterprise Edition lide normalmente com grandes reconstruções de índices.
Um processo de manutenção do SQL Server de longa duração, como dbo.IndexOptimize, normalmente tenta reverter as operações atuais quando você o interrompe. Dependendo de como o processo estava indo quando foi interrompido, a resposta do seu sistema poderia envolver contenção e bloqueio de recursos. Para minimizar interrupções, os trabalhos de manutenção normalmente devem ser programados durante períodos de baixa atividade.