Tentando habilitar a compactação em uma tabela grande em produção, mas agora estamos sem tempo (já estamos executando há 6,5 horas).
Qual é o impacto de cancelar a operação e deixá-la reverter?
Tentando determinar se devemos passar e deixá-lo terminar ou matá-lo e deixá-lo voltar. No entanto, se a reversão de uma operação de 6,5 horas demorará o mesmo tempo, talvez queiramos deixá-la terminar.
Nós o testamos no controle de qualidade, que tem discos mais lentos, ele foi concluído em 4 horas, então não sabemos ao certo por que isso está demorando tanto.
Coisas para saber:
- O tamanho da tabela é de 271 GB com aprox. 30 milhões de linhas
- Na marca de 3 horas, a unidade ficou cheia, expandimos cerca de 40 minutos depois
- O tipo de espera predominante é IO_Completion
- sp_whoisactive mostra a CPU e as leituras físicas aumentando, enquanto as leituras/gravações não são movidas há algum tempo
- Isso está no SQL Server 2017 Standard Edition, Windows Server 2016
Segue nossa declaração:
ALTER INDEX [PK_t1] ON [dbo].[t1] REBUILD PARTITION = ALL
WITH ( STATISTICS_NORECOMPUTE = OFF, ONLINE = OFF, SORT_IN_TEMPDB = OFF
, MAXDOP = 3, DATA_COMPRESSION = PAGE );
A reversão pode ser 2x, 4x, etc., pois a reversão é single-thread, mesmo para operações paralelas.
Meu conselho seria deixá-lo terminar. Qual é a sua alternativa? Não fazer isso nunca? Se você não pode confiar nas estimativas que seu sistema de controle de qualidade forneceu, não sei como você pode ter confiança para começar de novo e esperar um resultado diferente.
Não exagere. Se você cancelar a operação, pode levar muito tempo para reverter. Se você acha que reiniciar o servidor pode fazê-lo parar, pense novamente. Isso só vai prolongar sua dor.
Verifique os resultados desta consulta para ver o que está acontecendo:
Altere o
53
na última linha para o ID da sessão para a sessão que está fazendo o trabalho de compactação.A
command
coluna dirá "ROLLBACK" se a sessão já estiver sendo revertida. Ele dirá "ALTER INDEX" se a operação estiver progredindo e você deverá verreads
ewrites
incrementar.A saída é algo como:
Se a operação estiver sendo revertida, você poderá obter um tempo estimado de conclusão adicionando a
estimated_completion_time
coluna à consulta acima. Esteja ciente de que a coluna não mostrará nada para a operação de reconstrução do índice.Os detalhes das colunas podem ser vistos na página do Microsoft Docs .