症狀
假設您使用 Microsoft SQL Server 2012 或 SQL Server 2014。 當 SQL Server 發生鎖死時,您會收到下列由鎖死監視器造成的存取違規:
注意
sqldk!CSlotGroup::P shRelease
sqldk!CSlotPageMgr::Release
sqllang!commondelete
sqllang!delete[]
sqllang!CTraceDataSTVF::InternalReleaseResources
sqllang!TTableBase<CTraceDataSTVFInfo>::ReleaseResources
sqllang!CTraceDataSTVF::{dtor}
sqllang!CTraceDataSTVF::'scalar deleting destructor'
sqlmin!CSTVFInternal::Release
sqlmin!CQueryExecContext::~CQueryExecContext
sqlmin!CQueryInstance::ShutdownQueryExecContext
sqlmin!CQueryScan::ShutdownQueryExecContext
sqlmin!CQueryScan::D estroyQueryOnException
sqllang!CXStmtQuery::ShutdownOnException
sqllang!CXStmtQuery::FinishOnExceptionImp
sqllang!GetInterruptTicks
sqllang!InterruptTicks 未帶正負號的<__int64>::LoadTicks
sqllang!SOS_Ticks<InterruptTicks<未帶正負號的 __int64>,-3>::LoadTicks
sqllang!'CMsqlExecContext::FExecute'::'1'::catch$3
msvcr100!_CallSettingFrame
msvcr100!__CxxCallCatchBlock
ntdll!RcFrameConsolidation
sqllang!CMsqlExecContext::FExecute
sqllang!CSQLSource::Execute
sqllang!CStmtExecProc::XretLocalExec
sqllang!CStmtExecProc::XretExecExecute
sqllang!CXStmtExecProc::XretExecute
sqllang!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn
sqllang!CMsqlExecContext::ExecuteStmts<1,0>
sqllang!CMsqlExecContext::FExecute
sqllang!CSQLSource::Execute
sqllang!ExecuteSql
sqllang!CSpecProc::ExecuteSpecial
sqllang!CSpecProc::Execute
sqllang!process_request
sqllang!process_commands
sqldk!SOS_Task::P aram::Execute
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::P rocessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::P rocessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart
存取違規發生後,您會從 SQL Server 錯誤日誌中收到以下錯誤訊息:
注意
<
日期><時間> spid<ID> 使用「dbghelp.dll」版本「4.0.5」
<
日期><時間> spid<ID> **傾印執行緒 - spid = <ID,EC> = 0x0000007F8608E160
<
日期><時間> SPID<識別碼> ***堆疊傾印正在傳送至 <File Path>\<Dump FileName>.txt
<
日期><時間> SPID<ID> * *******************************************************************************
<
日期><時間> SPID<ID> *
<
日期><時間> SPID<識別碼> * 開始堆疊傾印:
<
日期><時間> spid<ID> * <日期><時間> spid <ID>
<
日期><時間> SPID<ID> *
<
日期><時間> SPID<ID> * 位置:qxcntxt.cpp:1143
<
日期><時間> SPID<ID> * 運算式: !」此程式碼不應引發任何例外狀況」
<
日期><時間> SPID<ID> * SPID: <識別碼>
<
日期><時間> SPID<ID> * 處理序識別碼:3556
<
日期><時間> SPID<ID> *
<
日期><時間> SPID<ID> * 輸入緩衝區 37 位元組 -
<
日期><時間> SPID<ID> * 16 00 00 00 12 00 00 00 02 00 00 00 00 00 00 00 00 00 00
<
日期><時間> SPID<ID> * ÿÿ & 01 00 00 00 ff ff 0c 00 00 00 00 00 00 26 04 04 05 00 00
<
日期><時間> SPID<ID> * 00
<
日期><時間> SPID<ID> *
<
日期><時間> SPID<ID> *
...
<
日期><時間> SPID<ID> 傾印的堆疊簽章已0x000000014202549F
<
日期><時間> SPID<ID> [INFO] 身分識別: 開始, 結束 |狀態 結果錯誤 推測 已準備 LazyCommit ReadOnly |交易資料庫 ThreadId |ReadSet WriteSet ScanSet 儲存點 LogSizeRq |CommitDep TotalComm 相依性 0 相依 1 相依 2 相依 3 相依 4 相依 5 相依 6 相依 7 |區域位置 |
<
日期><時間> SPID<識別碼> 逾時等待外部傾印處理程序 11800。
<
日期><時間> SPID<識別碼> 錯誤:17066,嚴重性:16,狀態:1。
<
日期><時間>spid<識別碼> SQL Server 判斷提示: 檔案: <qxcntxt.cpp>, line=1143 判斷提示失敗 = '!”此程式碼不應引發任何例外狀況」。 此錯誤可能與時間有關。 如果重新執行陳述式後仍持續發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新啟動伺服器以確保記憶體內資料結構未損毀。
解決方式
累積更新資訊
此問題已先在下列 SQL Server 累積更新中修正。
建議:安裝最新的 SQL Server 累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 我們建議您下載並安裝 SQL Server 的最新累積更新:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。