Sintomas
Durante a inicialização do Microsoft SQL Server, você observa um ou mais dos seguintes sintomas imediatamente após a conclusão da recuperação do banco de dados e a habilitação das conexões do cliente.
Sintoma 1
Você recebe mensagens de erro e afirmações semelhantes às seguintes no log de erros do SQL Server:
Observação
2014-12-13 08:03:34.85 spid24s Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 08:03:34.85 spid24s **Thread de despejo - spid = 0, EC = 0x0000000082274B20
2014-12-13 08:03:34.85 spid24s ***Stack Dump sendo enviado para C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt
2014-12-13 08:03:34.85 spid24s * *******************************************************************************
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * BEGIN STACK DUMP:
2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 spid 24
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * Localização: ghost.cpp:1742
2014-12-13 08:03:34.85 spid24s * Expressão: tcln1 != NULL
2014-12-13 08:03:34.85 spid24s * SPID: 24
2014-12-13 08:03:34.85 spid24s * Identificação do processo: 35444
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:35.47 spid24s Erro: 17066, Severidade: 16, Estado: 1.
2014-12-13 08:03:35.47 spid24s SQL Server Declaração: Arquivo: <ghost.cpp>, line=1742 Falha Assertion = 'tcln1 != NULL'. Esse erro pode estar relacionado ao tempo. Se o erro persistir após a execução da instrução, use DBCC CHECKDB para marcar a integridade estrutural do banco de dados ou reinicie o servidor para garantir que as estruturas de dados na memória não sejam corrompidas.
Sintoma 2
Você recebe mensagens de erro e exceções semelhantes às seguintes no log de erros do SQL Server:
Observação
2014-12-13 12:38:30.25 spid51 Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 12:38:30.25 spid51 ***Despejo de pilha sendo enviado para C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
2014-12-13 12:38:30.25 spid51 SqlDumpExceptionHandler: Processo 51 gerou a exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. O SQL Server está encerrando esse processo.
2014-12-13 12:38:30.25 spid51 * *******************************************************************************
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * BEGIN STACK DUMP:
2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 51
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * Endereço de exceção = 000000000030D47C Módulo(sqlservr+00000000000FD47C)
2014-12-13 12:38:30.25 spid51 * Código de exceção = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-12-13 12:38:30.25 spid51 * Ocorreu uma violação de acesso lendo o endereço FFFFFFFFFFFFFF
2014-12-13 12:38:30.25 spid51 * Buffer de entrada de 54 bytes -
2014-12-13 12:38:30.25 spid51 * exec usp_select1
2014-12-13 12:38:30.77 Erro do servidor: 17310, Severidade: 20, Estado: 1.
2014-12-13 12:38:30.77 Servidor Uma solicitação do usuário da sessão com o SPID 51 gerou uma exceção fatal. O SQL Server está encerrando esta sessão. Entre em contato com os Serviços de Atendimento ao Produto com o despejo produzido no diretório de log.
A Violação de Acesso terá a seguinte pilha de chamadas:
sqlservr! TaskGhostCleanup::IsHashed+0x8d
sqlservr! TaskGhostCleanup::Enfile+0x32
sqlservr! IndexRowScanner::MoveToRowOnNextPage+0x9c
sqlservr! IndexDataSetSession::GetNextRowValuesInternal+0x11cb
Sintoma 3
Depois de receber as mensagens mencionadas nas seções de sintomas anteriores, você receberá as seguintes mensagens no log de erros do SQL Server:
Observação
2014-12-13 08:04:53.37 Processo de Servidor 0:0:0 (0x23c8) O 0x000000002880C1A0 de trabalho parece não ceder no Agendador 23. Hora de criação do tópico: 13062953007877. CPU de thread aproximada usada: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.37 Processo de Servidor 0:0:0 (0x71d8) O 0x000000002A8D21A0 de trabalho parece não ceder no Agendador 30. Hora de criação do tópico: 13062953007891. CPU de thread aproximada usada: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.38 Servidor ***Não é possível obter contexto de thread para spid 0
2014-12-13 08:04:53.38 Servidor * *******************************************************************************
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * BEGIN STACK DUMP:
2014-12-13 08:04:53.38 Server * 12/13/14 08:04:53 spid 29488
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * Agendador sem rendimento
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * *******************************************************************************
2014-12-13 08:04:53.38 A assinatura da pilha do servidor para o despejo é 0x0000000000000341
2014-12-13 08:04:55.43 O código de retorno do processo de despejo externo do servidor 0x20000001. O processo de despejo externo não retornou erros.
2014-12-13 08:04:55.43 Processo de Servidor 0:0:0 (0x9358) O 0x0000000081CE41A0 de trabalho parece não produzir no Agendador 4. Hora de criação do tópico: 13062953009701. CPU de thread aproximada usada: kernel 0 ms, usuário 15 ms. Utilização do processo 0%. Sistema ocioso 88%. Intervalo: 70011 ms.
O SQL Server pode não estar respondendo às solicitações do usuário neste momento. Se esse for o caso, você deverá reiniciar o serviço para corrigir a situação.
Causa
Esse problema ocorre porque as consultas do usuário tentam usar as filas de limpeza fantasmas antes que esse processo seja totalmente inicializado.
Resolução
Informações sobre o service pack
Para resolver esse problema, obtenha o Service Pack 1 para o SQL Server 2014.
Para obter mais informações sobre o SQL Server 2014 Service Pack 1 (SP1), consulte os bugs corrigidos no SQL Server 2014 Service Pack 1.
Hotfix para o SQL Server 2008 SP4
Para resolve esse problema, aplique o KB 3034373: Um pacote de atualização de hotfix sob demanda está disponível para o SQL Server 2008 SP4.
Hotfix para o SQL Server 2008 R2 SP3
Para resolve esse problema, aplique o KB 3033860: Um pacote de atualização de hotfix sob demanda está disponível para SQL Server 2008 R2 SP3 .
Informações sobre a atualização cumulativa
A melhoria de recurso foi introduzida na atualização cumulativa seguinte do SQL Server.
Atualização cumulativa 6 para SQL Server 2014 /pt-pt/help/3031047
Atualização cumulativa 4 para SQL Server 2012 SP2 /en-us/help/3007556
Atualização Cumulativa 14 para SQL Server 2012 SP1 /en-us/help/3023636
Sobre atualizações cumulativas 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. Consulte as atualizações cumulativas mais recentes para SQL Server:
- Atualização cumulativa mais recente para o SQL Server 2014
- Atualização cumulativa mais recente para o SQL Server 2012 SP2
- Atualização cumulativa mais recente para o SQL Server 2012 SP1
Solução alternativa
Para solucionar esse problema, siga estas etapas:
- Configure -T669 como parâmetro de inicialização. Esses sinalizadores de rastreamento impedem que as consultas do usuário entrem em fila solicitações para o processo de limpeza fantasma.
- Configure um alerta de SQL Server Agent para acionar um trabalho no SQL Msg 3408. Por exemplo, configure o seguinte alerta:
A recuperação está concluída. Trata-se apenas de uma mensagem informativa. Não é necessária qualquer ação do utilizador. - Dentro desse trabalho, execute um script TSQL para aguardar de 5 a 10 minutos e, em seguida, execute o comando DBCC TRACEOFF (669,-1).
Este procedimento garante que este sinalizador de rastreio está ativo apenas durante SQL Server arranque. O uso desse sinalizador de rastreamento não afeta o funcionamento normal do processo de limpeza fantasma em segundo plano.
Status
A Microsoft confirmou que se trata de um problema com o SQL Server e está atualmente a investigar uma correção para este problema. Este artigo da Base de Dados de Conhecimento será atualizado com informações adicionais assim que for ficando disponível.
Referências
Dentro do mecanismo de armazenamento: limpeza fantasma em profundidade
Alertas
sp_add_alert (Transact-SQL)
DBCC TRACEOFF (Transact-SQL)
Rastrear Sinalizadores
Opções de Inicialização do Mecanismo de Banco de Dados