Sintomi
Durante l'avvio di Microsoft SQL Server, si nota uno o più dei seguenti sintomi immediatamente dopo il ripristino del database e sono abilitate le connessioni client.
Sintomo 1
Si ricevono messaggi di errore e asserzioni simili alle seguenti nel registro errori di SQL Server:
13-12-2014 08:03:34.85 spid24s Using 'dbghelp. dll' versione '4.0.5'
13-12-2014 08:03:34.85 spid24s * * Dump thread - spid = 0, CE = 0x0000000082274B20
13-12-2014 08:03:34.85 spid24s * * * Dump dello Stack inviato a 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 *
spid24s 08:03:34.85 2014-12-13 * inizio DUMP dello STACK:
spid24s 08:03:34.85 2014-12-13 * 12/13/14 08:03:34 spid 24
2014-12-13 08:03:34.85 spid24s *
spid24s 08:03:34.85 2014-12-13 * percorso: ghost.cpp:1742
spid24s 08:03:34.85 2014-12-13 * espressione: tcln1! = NULL
spid24s 08:03:34.85 2014-12-13 * SPID: 24
spid24s 08:03:34.85 2014-12-13 * ID processo: 35444
2014-12-13 08:03:34.85 spid24s *
13-12-2014 08:03:35.47 spid24s errore: 17066, gravità: 16, stato: 1.
13-12-2014 08:03:35.47 asserzione di SQL Server spid24s: File: < ghost.cpp >, riga = asserzione non riuscita 1742 = ' tcln1! = NULL'. Questo errore può essere correlato alla temporizzazione. Se l'errore persiste dopo aver nuovamente eseguito l'istruzione, utilizzare DBCC CHECKDB per verificare l'l'integrità strutturale del database o riavviare il server affinché le strutture di dati in memoria non siano danneggiate.
Sintomo 2
Si ricevono messaggi di errore e eccezioni simile alle seguente nel registro errori di SQL Server:
13-12-2014 12:38:30.25 spid51 Using 'dbghelp. dll' versione '4.0.5'
13-12-2014 12:38:30.25 spid51 * * * Dump dello Stack inviato a C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
13-12-2014 12:38:30.25 spid51 SqlDumpExceptionHandler: 51 processo generato l'eccezione irreversibile c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server, il processo verrà terminato.
2014-12-13 12:38:30.25 spid51 * *******************************************************************************
2014-12-13 12:38:30.25 spid51 *
spid51 12:38:30.25 2014-12-13 * inizio DUMP dello STACK:
spid51 12:38:30.25 2014-12-13 * 12/13/14 12:38:30 spid 51
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 *
spid51 12:38:30.25 2014-12-13 * indirizzo eccezione = 000000000030D47C Module(sqlservr+00000000000FD47C)
spid51 12:38:30.25 2014-12-13 * codice eccezione = c0000005 EXCEPTION_ACCESS_VIOLATION
spid51 12:38:30.25 2014-12-13 * violazione di accesso durante la lettura dell'indirizzo FFFFFFFFFFFFFFFF
spid51 12:38:30.25 2014-12-13 * byte di Input Buffer 54 -
spid51 12:38:30.25 2014-12-13 * exec usp_select1
Errore del Server di 2014-12-13 12:38:30.77: 17310, gravità: 20, stato: 1.
Richiesta di 2014-12-13 12:38:30.77 Server, un utente dalla sessione con SPID 51 generato un errore irreversibile. Chiusura sessione di SQL Server. Contatti il servizio supporto tecnico con il dump generati nella directory di registro.
La violazione di accesso avrà il seguente stack di chiamate:
sqlservr!TaskGhostCleanup::IsHashed+0x8d
sqlservr!TaskGhostCleanup::Enqueue+0x32
sqlservr!IndexRowScanner::MoveToRowOnNextPage+0x9c
sqlservr!IndexDataSetSession::GetNextRowValuesInternal+0x11cb
Sintomo 3
Dopo aver ricevuto i messaggi descritti nelle sezioni precedenti sui sintomi, i messaggi riportati di seguito sono visualizzati nel log degli errori di SQL Server:
13-12-2014 08:04:53.37 processo Server 0:0:0 (0x23c8) lavoratore 0x000000002880C1A0 sembra non cedente su 23 dell'utilità di pianificazione. Ora di creazione di thread: 13062953007877. Circa Thread della CPU utilizzato: kernel 0 ms, Sig. ra utente 0 utilizzo processo 0%. 88% di inattività del sistema. Intervallo: ms 70013
13-12-2014 08:04:53.37 processo Server 0:0:0 (0x71d8) 0x000000002A8D21A0 di lavoro sembra essere non cedente su 30 dell'utilità di pianificazione. Ora di creazione di thread: 13062953007891. Circa Thread della CPU utilizzato: kernel 0 ms, Sig. ra utente 0 utilizzo processo 0%. 88% di inattività del sistema. Intervallo: ms 70013
13-12-2014 08:04:53.38 Server * * * Impossibile ottenere il contesto di thread per spid 0
2014-12-13 08:04:53.38 Server * *******************************************************************************
13-12-2014 08:04:53.38 Server *
13-12-2014 08:04:53.38 Server * DUMP dello STACK iniziale:
13-12-2014 08:04:53.38 Server * 12/13/14 08:04:53 spid 29488
13-12-2014 08:04:53.38 Server *
13-12-2014 08:04:53.38 Server * utilità di pianificazione di Non cedere
13-12-2014 08:04:53.38 Server *
2014-12-13 08:04:53.38 Server * *******************************************************************************
13-12-2014 08:04:53.38 Server Stack firma per il dump è 0x0000000000000341
13-12-2014 08:04:55.43 processo dump Server esterni restituiscono codice 0x20000001. Il processo di dump esterno non ha restituito errori.
13-12-2014 08:04:55.43 processo Server 0:0:0 (0x9358) 0x0000000081CE41A0 di lavoro sembra essere non cedente in utilità di pianificazione 4. Ora di creazione del thread: 13062953009701. Thread utilizzato dalla CPU apross.: kernel 0 ms, utente 15 ms. Processo utilizzato 0%. 88% di inattività del sistema. Intervallo: 70011 ms
A questo punto, SQL Server potrebbe essere non rispondere alle richieste dell'utente. In questo caso, è necessario riavviare il servizio per risolvere la situazione.
Causa
Questo problema si verifica perché le query degli utenti tentano di utilizzare le code di pulitura ghost prima che questo processo è completamente inizializzato.
Risoluzione
Informazioni sul Service pack
Per risolvere questo problema, procurarsi il Service Pack 1 per SQL Server 2014.
Per ulteriori informazioni sul Service Pack 1 (SP1) di SQL Server 2014, vedere i bug risolti nel Service Pack 1 di SQL Server 2014.
Hotfix per SQL Server 2008 SP4
Per risolvere questo problema, applicare KB 3034373: un pacchetto di aggiornamento su richiesta hotfix è disponibile per SQL Server 2008 SP4.
Hotfix per SQL Server 2008 R2 SP3
Per risolvere questo problema, applicare KB 3033860: un pacchetto di aggiornamento su richiesta hotfix è disponibile per SQL Server 2008 R2 SP3.
Informazioni sull'aggiornamento cumulativo
Il miglioramento della funzionalità è stata introdotta nell'aggiornamento cumulativo seguente di SQL Server.
Aggiornamento cumulativo 6 per SQL Server 2014/en-us/help/3031047
Aggiornamento cumulativo 4 per SQL Server 2012 SP2/en-us/help/3007556
Aggiornamento cumulativo 14 per SQL Server 2012 SP1/en-us/help/3023636
Informazioni sugli aggiornamenti cumulativi per SQL Server
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutte le correzioni di protezione che sono state incluse nell'aggiornamento cumulativo precedente. Estrarre gli ultimi aggiornamenti cumulativi per SQL Server:
-
Aggiornamento cumulativo più recente per SQL Server 2012 SP2
-
Aggiornamento cumulativo più recente per SQL Server 2012 SP1
Soluzione alternativa
Per risolvere questo problema, attenersi alla seguente procedura:
-
Configurare -T669 come parametro di avvio. Questo flag di traccia impedisce che le query degli utenti accodino delle richieste al processo di pulitura ghost.
-
Consente di impostare un avviso di agente SQL Server per attivare un processo in SQL Msg 3408. Ad esempio, si consiglia di impostare l'avviso seguente:
Ripristino è completato. Si tratta di un messaggio informativo. Non è richiesta alcuna azione da parte dell'utente.
-
All'interno di questo processo, eseguire uno script TSQL per attendere da 5 a 10 minuti e quindi eseguire il comando DBCC TRACEOFF (669, -1) .
Questa procedura assicura che questo flag di traccia è attivo solo durante l'avvio di SQL Server. L'uso di questo flag di traccia non pregiudicare il normale funzionamento del processo di pulitura in background ghost.
Stato
Microsoft ha confermato che si tratta di un problema con SQL Server e si sta attualmente esaminando una correzione per questo problema. In questo articolo della Knowledge Base riportato di seguito avranno con informazioni aggiuntive appena disponibili.
Riferimenti
All'interno del motore di archiviazione: Ghost cleanup in profondità
Avvisi
sp_add_alert (Transact-SQL)
DBCC TRACEOFF (Transact-SQL)
Flag di traccia
Opzioni di avvio del motore di database