Sintomas
Durante a inicialização do Microsoft SQL Server, você percebe um ou mais dos seguintes sintomas imediatamente após a recuperação do banco de dados ser concluída e as conexões de cliente estão habilitadas.
Sintoma 1
Recebe mensagens de erro e afirmações semelhantes às seguintes no seu registo de erros SQL Server:
Nota
2014-12-13 08:03:34.85 spid24s Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 08:03:34.85 spid24s **Dump thread - 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 * 13/12/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 * ID do processo: 35444
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:35.47 spid24s Erro: 17066, gravidade: 16, estado: 1.
2014-12-13 08:03:35.47 spid24s SQL Server Asserção: Arquivo: <ghost.cpp>, linha=1742 Asserção Falhada = 'tcln1 != NULL'. Este erro pode estar relacionado com a temporização. Se o erro persistir depois de executar novamente a instrução, use DBCC CHECKDB para verificar a integridade estrutural do banco de dados ou reinicie o servidor para garantir que as estruturas de dados na memória não estejam corrompidas.
Sintoma 2
Recebe mensagens de erro e exceções semelhantes à seguinte no seu registo de erros SQL Server:
Nota
2014-12-13 12:38:30.25 spid51 Usando 'dbghelp.dll' versão '4.0.5'
2014-12-13 12:38:30.25 spid51 ***Stack Dump 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 exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está a terminar este 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 * 13/12/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 = 00000000030D47C Module(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 violação de acesso endereço de leitura FFFFFFFFFFFFFFFF
2014-12-13 12:38:30.25 spid51 * Buffer de entrada 54 bytes -
2014-12-13 12:38:30.25 spid51 * exec usp_select1
2014-12-13 12:38:30.77 Erro do servidor: 17310, gravidade: 20, estado: 1.
2014-12-13 12:38:30.77 Server Uma solicitação de usuário da sessão com SPID 51 gerou uma exceção fatal. SQL Server está a terminar esta sessão. Entre em contato com o Suporte 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::Enqueue+0x32
SQLSERVR! IndexRowScanner::MoveToRowOnNextPage+0x9c
SQLSERVR! IndexDataSetSession::GetNextRowValuesInternal+0x11cb
Sintoma 3
Depois de receber as mensagens mencionadas nas seções de sintomas anteriores, você recebe as seguintes mensagens no log de erros SQL Server:
Nota
2014-12-13 08:04:53.37 Processo do Servidor 0:0:0 (0x23c8) O 0x000000002880C1A0 de trabalho parece não ceder no Scheduler 23. Tempo de criação do tópico: 13062953007877. CPU de thread aproximado usado: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema inativo 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.37 Processo do Servidor 0:0:0 (0x71d8) O 0x000000002A8D21A0 de trabalho parece não ceder no Scheduler 30. Tempo de criação do tópico: 13062953007891. CPU de thread aproximado usado: kernel 0 ms, usuário 0 ms. Utilização do processo 0%. Sistema inativo 88%. Intervalo: 70013 ms.
2014-12-13 08:04:53.38 Server ***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 não produtivo
2014-12-13 08:04:53.38 Servidor *
2014-12-13 08:04:53.38 Servidor * *******************************************************************************
2014-12-13 08:04:53.38 Server Stack Signature for the dump is 0x0000000000000341
2014-12-13 08:04:55.43 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 do Servidor 0:0:0 (0x9358) O 0x0000000081CE41A0 do Trabalhador parece não ceder no Scheduler 4. Tempo de criação do tópico: 13062953009701. CPU de thread aproximado usado: kernel 0 ms, usuário 15 ms. Utilização do processo 0%. Sistema inativo 88%. Intervalo: 70011 ms.
SQL Server pode não responder às solicitações do usuário neste momento. Se for este o caso, terá de 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 fantasma antes que esse processo seja totalmente inicializado.
Resolução
Informações do service pack
Para resolver este problema, obtenha o Service Pack 1 para SQL Server 2014.
Para obter mais informações sobre o SQL Server 2014 Service Pack 1 (SP1), consulte Bugs corrigidos no SQL Server 2014 Service Pack 1 .
Hotfix para SQL Server 2008 SP4
Para resolver esse problema, aplique a 3034373 KB: um pacote de atualização de hotfix sob demanda está disponível para o SQL Server 2008 SP4.
Hotfix para SQL Server 2008 R2 SP3
Para resolver 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 de atualização cumulativa
O melhoramento da funcionalidade foi introduzido na seguinte atualização cumulativa 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
Acerca das atualizações cumulativas para 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
Para contornar este problema, siga estes passos:
- 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.
Estado
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