Sintomi
Supponiamo che tu usi Microsoft SQL Server 2012 o SQL Server 2014. Quando si verifica un deadlock in SQL Server, viene visualizzata la seguente violazione di accesso causata da monitoraggio deadlock:
sqldk! CSlotGroup::P shReleasesqldk! CSlotPageMgr:: Releasesqllang! commondeletesqllang! delete [] sqllang! CTraceDataSTVF::InternalReleaseResourcessqllang! TTableBase<CTraceDataSTVFInfo>:: ReleaseResourcessqllang! CTraceDataSTVF:: {dtor} sqllang! CTraceDataSTVF::' scalare l'eliminazione di destructor'sqlmin! CSTVFInternal::Releasesqlmin! CQueryExecContext:: ~ CQueryExecContextsqlmin! CQueryInstance::ShutdownQueryExecContextsqlmin! CQueryScan:: ShutdownQueryExecContextsqlmin! CQueryScan::D estroyQueryOnExceptionsqllang! CXStmtQuery::ShutdownOnExceptionsqllang! CXStmtQuery::FinishOnExceptionImpsqllang! GetInterruptTickssqllang! InterruptTicks<unsigned __int64>:: LoadTickssqllang! SOS_Ticks<InterruptTicks<senza segno __int64>,-3>:: LoadTickssqllang!' CMsqlExecContext:: FExecute '::' 1':: Catch $3msvcr100! _CallSettingFramemsvcr100! __CxxCallCatchBlockntdll! RcFrameConsolidationsqllang! CMsqlExecContext::FExecutesqllang! CSQLSource::Executesqllang! CStmtExecProc::XretLocalExecsqllang! CStmtExecProc::XretExecExecutesqllang! CXStmtExecProc::XretExecutesqllang! CExecStmtLoopVars::ExecuteXStmtAndSetXretReturnsqllang! CMsqlExecContext:: ExecuteStmts<1,0>sqllang! CMsqlExecContext::FExecutesqllang! CSQLSource::Executesqllang! ExecuteSqlsqllang! CSpecProc::ExecuteSpecialsqllang! CSpecProc:: Executesqllang! process_requestsqllang! process_commandssqldk! SOS_Task::P Aram:: Executesqldk! SOS_Scheduler:: RunTasksqldk! SOS_Scheduler::P rocessTaskssqldk! SchedulerManager::WorkerEntryPointsqldk! SystemThread:: RunWorkersqldk! SystemThreadDispatcher::P rocessWorkersqldk! SchedulerManager::ThreadEntryPointkernel32! BaseThreadInitThunkntdll! RtlUserThreadStart
Dopo la violazione di accesso, viene visualizzato il messaggio di errore seguente dal log degli errori di SQL Server:
<data> <ora> SPID<ID> con ' dbghelp. dll ' versione ' 4.0.5' <Data> <ora> SPID> <0 ID> * * thread di dump-SPID = <ID>, EC = 0X0000007F8608E160> <4 Data> <Timeora> spid> <8 ID> * * * il dump dello Stack viene inviato al <percorso di file> \ <il nome del documento di dump>. txt> <4 Data> <ora> SPID> <8 DateID> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <Data> <ora> SPID> <4 ID> <Data> <ora> SPID<ID> * <Data> <ora> SPID <ID><Data> <ora> SPID> <8 ID> * <Data> <ora> SPID> <4 ID> * location: qxcntxt. cpp: 1143> <6 Data> <ora> SPID> <0 ID> * Expression ID : !" Questo codice non deve generare eccezioni <data> <ora> SPID> <6 id> * SPID: <ID><Data> <ora> SPID> <4 id> * id processo: 3556> <6 Data> <ora> spid><0 id> * <Data> <ora> SPID><6 ID> * buffer di Input 37 byte-<data> <ora> SPID> <02 ID> * 16 00 00 00 12 00 00 00 02 00 00 00 00 00 00 00 00 00> <04 Data> <ora> SPID> <08 ID> * ÿŸ & 01 00 00 00 ff FF 0C 00 00 00 00 00 26 04 04 05 00 00> <1 Data> <ora> SPID> <5 ID> * 00> <7 Data> <ora> SPID> <1 ID> * <Data> <ora> SPID> <7 ID> *... <Data> <ora> SPID> <3 ID> la firma dello stack per il dump è 0x000000014202549F> <5 Data> <ora> SPID> <9 ID> [info] identità inizio fine | Errore relativo al risultato dello stato speculare su LazyCommit ReadOnly | Database delle transazioni ThreadId | Scritto di salvataggio LogSizeRq | CommitDep TotalComm dipendente 0 dipendente 1 dipendente 2 dipendente da 3 dipendenti 5 dipendenti da 7 dipendenti da 6 dipendente Posizione area |> <41 data> <ora> SPID> <45 ID> timeout in attesa di un processo di dump esterno 11800. <data> <ora> SPID> <1 ID> errore: 17066, gravità: 16, stato: 1. <Data> <ora> SPID> <7 ID> SQL Server Assertion: file: <qxcntxt. cpp>, line = 1143 Failed Assertion ='! " Questo codice non deve generare eccezioni. Questo errore può essere correlato alla temporizzazione. Se l'errore persiste dopo la rieseguire l'istruzione, usare DBCC CHECKDB per controllare il database per l'integrità strutturale oppure riavviare il server per verificare che le strutture di dati in memoria non siano danneggiate.
Risoluzione
Informazioni sull'aggiornamento cumulativo
Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. È consigliabile scaricare e installare gli aggiornamenti cumulativi più recenti per SQL Server:
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".