新的並行排程診斷已經加到 SQL Server 中

文章翻譯 文章翻譯
文章編號: 319892 - 檢視此文章適用的產品。
錯誤 #:102179 (SQLBUG_70)
錯誤 #:356317 (SQLBUG_80)
全部展開 | 全部摺疊

在此頁中

結論

為了要維持高動態的運作形式,SQL Server 內含多個內部處理程序以確保穩定性。鎖定監視器是其中一個例子,可讓您用來識別及解決鎖死情況。

SQL Server 7.0 Service Pack 4 (SP4) 與 SQL Server 2000 Service Pack 3 (SP3) 新增了增強的處理程序健康監視。健康監視增強功能已存在於以下區域:
  • 封鎖
  • 網路問題
  • 輸入/輸出 (IO)
  • 記憶體
  • CPU
當 SQL Server 偵測到健康問題時,會將如下的一系列新錯誤訊息記錄到 SQL Server 錯誤記錄檔中。如需有關這些錯誤訊息狀態的詳細資訊,請參閱本文的<其他相關資訊>一節。

SQL Server 7.0

錯誤 1223:處理程序識別碼 %d:%d 無法取得資源 %s 上的鎖定 "%s",因為排程器 %d 上存在了該資源的潛在鎖死因素。處理程序識別碼 %d:%d 在此資源上保持鎖定 "%h"。

SQL Server 2000

錯誤 1229:處理程序識別碼 ID %d:%d 擁有在排程器 %d 上封鎖處理程序的資源。
新的錯誤訊息包括以下系列。

延伸鎖定偵測: 1223, 1229
排程器擱置偵測:17881, 17883
所有排程器擱置偵測: 17882, 17884
警告 請注意,與健康相關的問題常是之前遇到的情況的結果。您必須仔細閱讀 SQL Server 錯誤記錄檔與系統事件記錄以判定實際的根本原因。

例如,17883 錯誤訊息可能代表排程器的問題。但是,錯誤記錄檔可能會顯示之前發生的例外,該例外錯誤地將 SQL Server 處理程序置於一個不良狀態下;或者,也可能是應用程式導致了嚴重的封鎖狀態。
注意 Microsoft 會試著將所有的內容維持為最新的 17883 狀態。但是,17883 錯誤訊息是一個在許多原因下都可能觸發的健康偵測訊息。Microsoft 不僅更正了有關 SQL Server 軟體產品的一些已知的問題,還在許多與 SQL Server 軟體無關的情況下遇到了 17883 的錯誤。例如,當出現外部應用程式的 CPU 消耗與硬體故障時發生此錯誤。如果您要避免這個錯誤再次發生,您必須先判定 17883 錯誤訊息的根本原因。

其他相關資訊

本節大略介紹了健康增強功能與 SQL Server 錯誤記錄檔中可能記錄的相關錯誤訊息。

UMS

如果要詳細瞭解其他健康診斷資訊,您必須先瞭解 SQL Server 如何使用 User Mode Scheduling (UMS) Ums.dll 說明檔。

SQL Server 7.0 與 Microsoft SQL Server 2000 都使用邏輯排程器。這些排程器可以幫助您確定 SQL Server 能夠使作業系統在與關鍵資料庫動作路徑相關的資源使用上達到最大化的程度。UMS 層可以確保 SQL Server 正確使用 Win32 事件來嚴格控制執行緒與光纖 (或兩者) 對於作業系統的排程可見度。嚴格地控制可以執行的執行緒或光纖,SQL Server 可以在與例如鎖定等資料庫基本項目相關的方面最大化 CPU 的使用。

例如,邏輯排程允許鎖定等待者休眠 (Win32 事件上的 WaitForSingleObject),直到鎖定擁有者釋放鎖定並送喚醒訊號 (SetEvent) 給它們為止。

延伸鎖定偵測

已延伸鎖定監視器以偵測 (工作者執行緒) 資源層級鎖定案例。如果擁有鎖定的 SPID 目前已排入排程器中,由於所有指定的工作者執行緒皆已建立,且所有指定的工作者執行緒都在無法解決的等待狀態下,以下錯誤訊息將會寫入 SQL Server 錯誤記錄檔中:

SQL Server 7.0

錯誤 1223:處理程序識別碼 %d:%d 無法取得資源 %s 上的鎖定 "%s",因為排程器 %d 上存在了該資源的潛在鎖死因素。處理程序識別碼 %d:%d 在此資源上保持鎖定 "%h"。
參數說明:
  1. 等待 SPID
  2. 等待 ECID (子處理程序執行識別碼)
  3. 鎖定模式名稱
  4. 資源名稱
  5. 邏輯 UMS 排程器識別碼
  6. 擁有 SPID
  7. 擁有 ECID
  8. 擁有資源名稱

SQL Server 2000

錯誤 1229:處理程序識別碼 ID %d:%d 擁有在排程器 %d 上封鎖處理程序的資源。
參數說明:
  1. 擁有 SPID
  2. 擁有 ECID (子處理程序執行識別碼)
  3. 擁有邏輯 UMS 排程器識別碼

追蹤旗標

SQL Server 含有可以停用此健康報告的追蹤旗標。

如果要停用報告行為,請使用下列其中一種方法:
  • 建立啟動參數 (-T###)
  • 使用 DBCC 追蹤 (###)
SQL Server 7.0:-T1216

SQL Server 2000:-T1261

注意 這並不是排版錯誤。-在 SQL Server 2000 上,T1216 已經做為與鎖死輸出相關的追蹤旗標使用。因此會使用 1261。

範例案例

用戶端 1 連接到 SQL Server。

用戶端 1 執行了 Transact-SQL 命令,開始交易並執行資料修改。

例如:
begin tran
update authors set au_lname = 'test'
用戶端 1 會成為 IDLE,顯示為休眠,在 sysprocesses 系統表中含有開放交易,然後等待命令。

用戶端 2 至 255:大約又有 254 個用戶端登入 SQL Server 並從作者表中發出 SELECT。這些用戶端全都會在原始更新上遭到封鎖。

用戶端 1 會試著認可交易,但它會排入佇列中,因為所有工作者執行緒都與用戶端 2 至 255 有關。

封鎖

這個錯誤訊息通常表示發生了延伸封鎖情況。每次執行封鎖監視器時 (約每 5 秒鐘一次),訊息便會加到 SQL Server 錯誤記錄檔中。

注意 每個遇到資源問題的 SPID/ECID 都會記錄一個訊息。因此,在同一個鎖定監視器重複過程中,將會記錄數個訊息。

SQL Server 並不會自動解決這種情況。但是,它將會以相應的錯誤訊息 (1223 或 1229) 來指出問題。當發生這個問題時,您可以透過多種方法來解決問題。

鎖定或查詢逾時

如果查詢使用鎖定或查詢逾時,這種情況通常會在發生逾時的時候自行解決。但是,發生這種情況表示需要檢查,因為這指出了在並行狀況下應用程式執行減少。

Transact-SQL KILL

如果管理員能夠查詢 sysprocesses 系統表,他們便可使用 Transact-SQL KILL 命令來終止 BLOCKING SPID,並終止適當的 BLOCKED SPIDS 以釋放工作者執行緒,使系統返回正常狀態。
251004 INF:如何監視 SQL Server 7.0 封鎖
271509 INF:如何監視 SQL Server 2000 封鎖
263889 SQL blocking due to COMPILE locks

支援協助

如果您無法取得 sysprocesses 系統表資訊,請取得 (Sqlservr.exe) 處理程序的處理程序傾印,並連絡 Microsoft SQL Server 支援部門以進行進一步的檢查。

平行查詢

在極少的環境中,由於選擇了不良的平行查詢計畫,才會出現這個錯誤訊息。如果平行查詢選擇使用大量可用 SQL Server 工作者來完成查詢,它便可能耗盡 SQL Server 的工作者集區。sysprocesses 系統表中含有 ECID 欄以指出用來代表個別 SPID 的工作者數目。如果相對於電腦上的實體 CPU,ECID 數值偏高,這通常就表示調整不佳的查詢。檢視查詢計畫與最大平行程度 (max degree of parallelism,MAXDOP) 查詢選項設定以正確調整有問題的查詢。

排程器的問題

邏輯排程器的數目大小也有關連。當啟動 SQL Server 時,最大工作者執行緒設定會平均分給邏輯排程器。當 SQL Server 可用的 CPU 數增加時,工作者佇列的分割程度也越高。如果應用程式的交易範圍活動不理想,則當介入的 CPU 越多時,資源不足的情況會很快地出現。針對這種情況,應用程式交易範圍將立即更正。

下表顯示了當最大工作者執行緒sp_configure 預存程序設定等於 255 時,以 CPU 數目為基礎的工作者集區指定情形。
摺疊此表格展開此表格
CPU 封鎖鍊結長度
1255
2128
464
832
1616
我們建議您將最大工作者執行緒設定維持於預設的 255。 如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
319942 HOW TO:判斷正確的 SQL Server 組態設定

UMS 健康

新增了內部常式來每 60 秒檢查一次邏輯排程器的健康。如果判定排程器已經停止或沒有回應,則適當的錯誤訊息會記錄到 SQL Server 錯誤記錄檔上。每 60 秒記錄一次錯誤,直到問題解決為止。

如前所述,這些訊息通常與之前的事件有關。仔細參閱 SQL Server 錯誤記錄檔及應用程式事件記錄以幫助您判斷問題的根本原因。

注意 每 60 秒拍攝一次快照。因此,在第一次偵測情況之前可能已經經過了 120 秒。

SQL Server 7.0

錯誤:17881 - 排程器 %1!ld! 似乎已經擱置。PSS 0x%2!p!, EC 0x%3!p !, UMS Context 0x%4!p!
錯誤:17882 - 所有排程器上都存在了潛在鎖死

追蹤旗標

如果您使用 -T1217 啟動參數來啟動 SQL Server 7.0,您便可以停用這兩項檢查。

SQL Server 2000 SP3

8.00.760 (SP3)
錯誤:17883 - 排程器 %1!ld! 似乎已經擱置。SPID %2!ld!, ECID %3! ld!, UMS Context 0x%4!p!

8.00.765

從 Hotfix 8.00.765 開始,訊息已經變得更容易瞭解。
錯誤:17883 - 處理程序 %1!ld!:%2!ld!(%3!lx!)UMS Context 0x%4!p! 似乎在排程器 %5!ld! 上為非傳送

範例:
2003-03-21 08:22:20.27 伺服器錯誤:17883,重要性:1,狀態:0
2003-03-21 08:22:20.27 伺服器處理程序 51:0 (dbc) UMS Context 0x018DA930 似乎在排程器 0 上為非傳送。
2003-03-21 08:22:22.45 傾印的伺服器堆疊簽章為 0x00000000
錯誤:17884 - 所有排程器上都存在了潛在鎖死

追蹤旗標

您可以使用 -T1260 啟動參數來啟動 SQL Server,您便可以停用這兩項檢查。

SQL Server 2000 MiniDump 檔

從 SQL Server 2000 SP3 開始,已經增加了擷取 MiniDump 處理程序的能力。從 build 8.00.765 開始,當 SQL Server 第一次偵測到停止的排程器時,便會產生 MiniDump 檔。

為了要防止繼續為這些錯誤訊息 (17883 與 17884) 產生 MiniDump 檔,預設行為是針對 SQL Server 處理程序的壽命產生單一 MiniDump 檔。如果要針對每一次發生的訊息啟用 MiniDump 檔,請開啟追蹤旗標 -T1262。

MiniDump 檔產生於 LOG 資料夾中,檔名為 SQLDmpr###.mdmp。此 MiniDump 檔可由 Microsoft 技術支援小組評估以協助您判斷問題的根本原因。

錯誤 17881 與錯誤 17883

這些訊息指出了單一的 UMS 排程器遇到了一個傳送的問題。健康監視偵測到似乎有一個含有工作者執行緒的排程器不允許其他工作者進行,而該排程器已經標示了無反應旗標。排程器停止反應通常是 SQL Server 產品或外部元件 (XProc、COM 物件等) 的錯誤。

以下是已知的 17833 情況的範例。確定您搜尋了「Microsoft 知識庫」中的相關文件。如果您的系統需要更新的修補程式,請視情況予以套用。
815056 FIX:檢查點處理程序可能會延遲 SQL Server 資料庫活動且沒有正確傳送排程器,因此導致錯誤:17883 發生
810885 高階磁碟子系統可能發生錯誤 17883
如果您無法立即判斷出根本的原因,請參考錯誤記錄檔的問題,並尋求技術支援人員的協助。

當排程器無法正確回應時,它可能會降低 SQL Server 的整體並行性。SQL Server 也可能出現停止或沒有回應的情況。

錯誤 17882 與 17884

這些訊息指出所有的 UMS 排程器都遇到了傳送的問題。這表示整個 SQL Server 系統的問題,且 SQL Server 似乎已經沒有回應。對於 17881 與 17883 訊息,請查詢錯誤記錄檔與「Microsoft 知識庫」以取得更詳細的資訊。如有必要,請尋求技術支援人員的協助。

屬性

文章編號: 319892 - 上次校閱: 2005年9月2日 - 版次: 8.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 7.0 Service Pack 4
關鍵字:?
kbsample kberrmsg kbbug kbfix kbinfo KB319892
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com