SQL Server 啟動期間發生錯誤 17066 或 17310

Applies To
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Express Edition

症狀

在 Microsoft SQL Server 啟動期間,資料庫復原完成並啟用用戶端連線之後,您會立即注意到下列一或多個徵兆。

徵兆 1

您會在 SQL Server 錯誤記錄檔中收到類似下列的錯誤訊息和判斷提示:

注意

2014-12-13 08:03:34.85 SPID24S 使用 'dbghelp.dll' 版本'4.0.5'
2014-12-13 08:03:34.85 spid24s **傾印執行緒 - spid = 0, EC = 0x0000000082274B20
2014-12-13 08:03:34.85 SPID24S ***堆疊傾印正在傳送至 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 * 開始堆疊傾印:
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 * 位置:ghost.cpp:1742
2014-12-13 08:03:34.85 SPID24S * 運算式:tcln1 != NULL
2014-12-13 08:03:34.85 SPID24S * SPID:24
2014-12-13 08:03:34.85 SPID24S * 處理序識別碼: 35444
2014-12-13 08:03:34.85 SPID24S *

2014-12-13 08:03:35.47 SPID24S 錯誤:17066,嚴重性:16,狀態:1。
2014-12-13 08:03:35.47 SPID24S SQL Server 判斷: 檔案: <ghost.cpp>, line=1742 失敗的判斷 = 'tcln1 != NULL'。 此錯誤可能與時間有關。 如果重新執行陳述式後仍持續發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新啟動伺服器以確保記憶體內資料結構未損毀。

徵兆 2

您會在 SQL Server 錯誤記錄檔中收到類似下列的錯誤訊息和例外狀況:

注意

2014-12-13 12:38:30.25 SPID51 使用「dbghelp.dll」版本「4.0.5」
2014-12-13 12:38:30.25 SPID51 ***堆疊傾印正在傳送至 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
2014-12-13 12:38:30.25 SPID51 SqlDumpExceptionHandler: 處理序 51 已產生嚴重例外狀況 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Server 正在終止此程序。
2014-12-13 12:38:30.25 SPID51 * *******************************************************************************
2014-12-13 12:38:30.25 SPID51 *
2014-12-13 12:38:30.25 SPID51 * 開始堆疊傾印:
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 * 例外狀況位址 = 000000000030D47C 模組 (sqlservr+0000000000FD47C)
2014-12-13 12:38:30.25 SPID51 * 例外狀況代碼 = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-12-13 12:38:30.25 SPID51 * 讀取位址 FFFFFFFFFFFFFFFF 發生存取衝突
2014-12-13 12:38:30.25 SPID51 * 輸入緩衝區 54 位元組 -
2014-12-13 12:38:30.25 SPID51 * exec usp_select1

2014-12-13 12:38:30.77 伺服器錯誤:17310,嚴重性:20,狀態:1。
2014-12-13 12:38:30.77 伺服器 來自 SPID 51 工作階段的使用者要求產生嚴重例外狀況。 SQL Server 正在終止此工作階段。 使用日誌目錄中產生的傾印與產品支援服務聯繫。

存取違規將具有以下呼叫堆疊:

sqlservr!TaskGhostCleanup::IsHashed+0x8d
sqlservr!TaskGhostCleanup::Enqueue+0x32
sqlservr!IndexRowScanner::MoveToRowOnNextPage+0x9c
sqlservr!IndexDataSetSession::GetNextRowValuesInternal+0x11cb

徵兆 3

收到上述徵狀章節所述的訊息之後,您會在 SQL Server 錯誤記錄檔中收到下列訊息:

注意

2014-12-13 08:04:53.37 伺服器處理序 0:0:0 (0x23c8) 背景工作角色0x000000002880C1A0在排程器 23 上似乎未產生。 對話建立時間:13062953007877。 使用的大約執行緒 CPU:核心 0 毫秒,使用者 0 毫秒。 處理序使用率為 0%。 系統閒置 88%。 間隔:70013 ms。
2014-12-13 08:04:53.37 伺服器處理序 0:0:0 (0x71d8) Worker 0x000000002A8D21A0在排程器 30 上似乎不讓步。 對話建立時間:13062953007891。 使用的大約執行緒 CPU:核心 0 毫秒,使用者 0 毫秒。 處理序使用率為 0%。 系統閒置 88%。 間隔:70013 ms。
2014-12-13 08:04:53.38 伺服器 ***無法取得 spid 0 的執行緒內容
2014-12-13 08:04:53.38 伺服器 * *******************************************************************************
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * 開始堆疊傾印:
2014-12-13 08:04:53.38 伺服器 * 12/13/14 08:04:53 SPID 29488
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * 非屈服排程器
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * *******************************************************************************
2014-12-13 08:04:53.38 傾印的伺服器堆疊簽章已0x0000000000000341
2014-12-13 08:04:55.43 伺服器外部傾印程序傳回代碼 0x20000001。 外部傾印程序未傳回任何錯誤。
2014-12-13 08:04:55.43 伺服器處理序 0:0:0 (0x9358) 背景工作角色0x0000000081CE41A0在排程器 4 上似乎不讓步。 對話建立時間:13062953009701。 大約使用執行緒 CPU:核心 0 ms,使用者 15 ms。 處理序使用率為 0%。 系統閒置 88%。 間隔:70011 ms。

此時 SQL Server 可能無法回應使用者要求。 如果是這種情況,您必須重新啟動服務以更正這種情況。

原因

發生此問題的原因是使用者查詢會在此程序完全初始化之前嘗試使用鬼色清除佇列。

解決方式

Service Pack 資訊

要解決此問題,請取得 SQL Server 2014 的 Service Pack 1。

如需 SQL Server 2014 Service Pack 1 (SP1) 的詳細資訊,請參閱 SQL Server 2014 Service Pack 1 中修正的錯誤。

適用於 SQL Server 2008 SP4 的 Hotfix

若要解決此問題,請套用 KB 3034373: 現已提供適用於 SQL Server 2008 SP4 的隨選 Hotfix 更新套件。

適用於 SQL Server 2008 R2 SP3 的 Hotfix

若要解決此問題,請套用 KB 3033860: 現已提供適用於 SQL Server 2008 R2 SP3 的隨選 Hotfix 更新套件。

累積更新資訊

此功能改良功能已在下列 SQL Server 累積更新中引進。

SQL Server 2014 的累積更新 6 /zh-tw/help/3031047

SQL Server 2012 SP2 的累積更新 4 /zh-tw/help/3007556

SQL Server 2012 SP1 的累積更新 14 /zh-tw/help/3023636

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

      

因應措施

若要解決此問題,請依照下列步驟執行:

  1. 將 -T669 設定為啟動參數。 此追蹤旗標可防止使用者查詢將對 Ghost 清除程序的要求排入佇列。
  2. 設定 SQL Server Agent 警示以觸發 SQL Msg 3408 上的作業。 例如,設定下列警示:
    復原已完成。 這是一則資訊訊息。 不需要使用者動作。
  3. 在此工作內,執行 TSQL 指令碼等待 5 到 10 分鐘,然後執行 DBCC TRACEOFF (669,-1) 命令。

此程序可確保只有在 SQL Server 啟動期間,此追蹤旗標才會處於作用中狀態。 使用此追蹤旗標不會影響背景幻影清除程式的一般運作。

狀態

Microsoft 已確認這是 SQL Server 的問題,目前正在研究此問題的修正程式。 此知識庫文章將在其他資訊可用時進行更新。

參考資料

存儲引擎內部:深度清理幽靈
        
         提醒
        
         sp_add_alert (Transact-SQL)
        
         DBCC TRACEOFF (Transact-SQL)
        
         追蹤旗標
        
         資料庫引擎啟動選項