Sintomas
Assuma que tem o Microsoft SQL Server 2014, 2016 ou 2017 instalado. Pode experimentar uma ou mais das seguintes questões:
-
A instância do SQL Server aparece sem resposta e ocorre um erro de "Programador não-recorrível". Pode ter de reiniciar o servidor para se recuperar.
-
A reversão de uma transação pode demorar muito tempo a ser concluída. Na maioria dos casos, reiniciar o caso permitirá que a base de dados recupere muito mais rapidamente do que o revés. Note que existem muitas razões para que um revés possa demorar muito tempo a ser concluído, consulte a secção "Mais Informações" abaixo para obter detalhes sobre a monitorização das reversãos antes de tentar reiniciar.
-
Pode ver altas esperas em spinlocks como SOS_OBJECT_STORE.
Resolução
Este problema é corrigido nas seguintes atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa do 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. Confira as últimas atualizações cumulativas do SQL Server:
Última atualização cumulativa para SQL Server 2017
Informações de pacote de serviço para SQL Server
Esta atualização é fixada no seguinte pacote de serviços para o SQL Server:
Os pacotes de serviço são cumulativos. Cada novo pacote de serviços contém todas as correções que se encontram em pacotes de serviços anteriores, juntamente com quaisquer novas correções. A nossa recomendação é aplicar o mais recente pacote de serviços e a mais recente atualização cumulativa para esse pacote de serviços. Não tem de instalar um pacote de serviços anterior antes de instalar o mais recente pacote de serviços. Utilize o Quadro 1 no seguinte artigo para encontrar mais informações sobre o mais recente pacote de serviços e a mais recente atualização cumulativa.
Como determinar a versão, edição e nível de atualização do SQL Server e seus componentes
Mais Informações
Existem muitas razões pelas quais um revés pode demorar muito tempo, como uma transação de longa duração, um grande número de VLFs no ficheiro de registo de transações, I/S lento etc. A fim de verificar se a questão descrita neste artigo é a causa principal de um retrocesso lento, sugerimos que sejam utilizadas as seguintes técnicas para monitorizar o progresso da operação de reversão:
-
A partir de sys.dm_exec_requests,identifique o session_id cujo comando está definido para "KILLED/ROLLBACK" e certifique-se de que a sessão está a acumular tempo de IO e CPU indicando progressos. Se a IO não estiver a mudar, então pode ser uma indicação de que está a encontrar a questão descrita neste artigo.
-
Consulta sys.dm_tran_database_transactions identificar o estado atual do reversão utilizando uma consulta como:
SELECT getdate() como CurrentTime, database_transaction_next_undo_lsn,database_transaction_begin_lsn,t.transaction_id,database_transaction_begin_time,database_transaction_log_record_count,db_name(t.database_id)
FROM sys.dm_tran_database_transactions t
JUNTE-SE a sys.dm_exec_requests s ON t.transaction_id=s.transaction_id
ONDE t.database_id=db_id ('<Nome da Base de Dados') e s.session_id=<Session_id a realização da operação de reversão>
Nota:
Na consulta acima,
database_transaction_next_undo_lsn é o LSN do próximo disco a desfazer. database_transaction_begin_lsn é o LSN do registo de início da transação no registo de transações.
database_transaction_next_undo_lsn deve diminuir a cada instantâneo desta consulta. A reversão será concluída com sucesso quando o database_transaction_next_undo_lsn chegar a database_transaction_begin_lsn.
O objetivo aqui é tirar algumas fotos da consulta anterior dentro de um intervalo pré-determinado e, em seguida, usar o delta das LSNs processadas em database_transaction_next_undo_lsn dentro desse intervalo e extrapolar o tempo necessário para estimar o tempo que levará para que o database_transaction_next_undo_lsn chegue ao database_transaction_begin_lsn.
Se o revés estiver a progredir a um ritmo decente entre cada instantâneo, sugerimos que o revés seja concluído por si só sem reiniciar a instância do SQL Server.
Consulte os seguintes artigos para obter mais informações sobre a recuperação a longo prazo:
-
SQL Server (2000, 2005, 2008): Recuperação/reversão demorando mais do que o esperado
-
Como uma estrutura de ficheiros de registo pode afetar o tempo de recuperação da base de dados
-
Rastreio do progresso da recuperação da base de dados utilizando informações do DMV
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Conheça a terminologiaque a Microsoft utiliza para descrever atualizações de software.