KB2344600 - 修正:在 SQL Server 2008 或 SQL Server 2008 R2 中搭配使用多個 OR 和 AND 述詞時,可能會發生「非yielding 排程器」錯誤

Applies To
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Workgroup SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup

Microsoft 會發佈 Microsoft SQL Server 2008 修正程式作為一個可下載的檔案。 由於修正程式是累積式,因此每個新版本都包含所有 Hotfix 和先前 SQL Server 2008 修正程式版本中包含的所有安全性修正程式。Microsoft 會發佈 Microsoft SQL Server 2008 或 SQL Server 2008 R2 修正程式作為一個可下載的檔案。 由於修正程式是累積的,因此每個新版本都包含先前的 SQL Server 2008 或 SQL Server 2008 R2 修正程式版本中包含的所有 Hotfix 和所有安全性修正程式。

症狀

請考慮以下案例:

  • 您有一個全文檢索搜尋查詢,該查詢在 Microsoft SQL Server 2008 或 SQL Server 2008 R2 的條件中使用 CONTAINSTABLE 函數以及許多 OR 和 AND 述詞。 例如,您有下列 50 個 AND 運算: Declare @Keywords varchar (4000) = NULL

    set @Keywords= N' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (
    (“TOKarchitect” 或 “architectural”)
    和 (“TOKengineer”或“engineer”) )
    和 “gineer”) 和 (“TOKmechanical” 或 “mechanical”) )
    和 (“TOKengineer”或“Engineering”) )
    及 (「TOKelectronic」或「Electronics」) ) 及 (「TOKengineer」或「Engineer」) ) 及 (「TOKelectronic」或「Electronics」) ) 及 (「TOKengineer」或「Engineering」) ) 及 (「TOKelectric」或「Electrical」) ) 及 (「TOKengineer」或「Engineer」) ) 及 (「TOKelectric」或「Electrical」) ) 及 (「TOKengineer」或「Engineering」) ) 及 (「TOKcontrol」或「Control」) ) 及 (「TOKsystem」或「Systems」) ) 及 (「TOKengineer」或「Engineer」) ) 和 (“TOKproject” 或 “Project”) ) 和 (“TOKmanager” 或 “Manager”) ) 和 (“TOKengineer” 或 “Engineering”) ) 和 “Scheme”) 和 (“TOKmanufacture” 或 “Manufacturing”) ) 和 (“TOKengineer” 或 “Engineer”) ) 和 (“TOKmetallurgist”或“Metallurgy”) ) 和 (“TOKmetallurgist”或“Metallurgist”) ) 和 (“TOKprocess”或“Process”) ) 和 (“TOKTechnology”或“Technology”) ) 和 (“TOKproduct”或“Production”) ) 及 (“TOKengineer” 或 “Engineer”) ) 和 (“TOKQuality” 或 “Quality”) ) 和 (“TOKengineer” 或 “Engineer”) ) 和 (“TOKQuality” 或 “Quality”) ) 和 (“TOKcontrol” 或 “Control”) ) 和 (“TOKengineer” 」或「工程師」) ) 及「機電一體化」) 及 (「TOKcivil」或「Civil」) ) 及 (「TOKengineer」或「工程師」) ) (「TOKcivil」或「Civil」) ) (「TOKengineer」或「Engineering」) ) 及 (」TOKdesign」或「設計」) ) (「TOKengineer」或「工程」) ) 及 (「TOKdesign」或「設計」) ) (「TOKengineer」或「工程師」) ) 及 (「TOKgraduate」或「Graduate」) ) 及 (「TOKengineer」或「Engineer」) ) 及 (「TOKgraduate」或「Graduate」) ) (「TOKengineer」或「engineering」) ) 與 (「TOKengineer」或「Engineering」) ) 及 (「TOKgraduate」或「Graduate」) ) ) ANDNOT ( ) (「TOKRecruitment」或「Recruitment」) ) (「TOKconsultant」或「consultant」) ) 及 (「TOKtrainee」或「Trainee」) ) 及 (「TOKRecruitment」或「recruitment」) )

    select * from CONTAINSTABLE (test_table, *, @keywords, 1000)

  • 您執行查詢。

在此案例中,可能會發生「非讓路排程器」錯誤。 此外,會在 SQL Server 2008 或 SQL Server 2008 R2 應用程式記錄資料夾中產生迷你傾印檔案,並在 SQL Server 錯誤記錄檔中記錄下列錯誤:

注意

使用「dbghelp.dll」版本「4.0.5」的時間戳>記伺服器<

<時間戳記> 伺服器 ***無法取得 spid 0 的執行緒內容
<時間戳記> 伺服器 *
*******************************************************************************

<時間戳記> 伺服器 *

<時間戳記> 伺服器 * 開始堆疊傾印:

<時間戳記> 伺服器 * <Time> spid <SPID>
<時間戳記> 伺服器 *

<時間戳記> 伺服器 * 非屈服排程器

<時間戳記> 伺服器 *

<時間戳記> 伺服器 *
*******************************************************************************

傾印的時間戳>記伺服器堆疊簽章已0x000000000000030D<

<時間戳記> 伺服器外部傾印程序傳回碼 0x20000001。 外部傾印程序未傳回任何錯誤。

<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用的執行緒 CPU:核心 62 毫秒,使用者 75187 毫秒。 處理序利用率 98%。 系統閒置 0%。 間隔:76403 ms。

<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用執行緒 CPU:核心 125 毫秒,使用者 145250 毫秒。 處理序利用率 98%。 系統閒置 0%。 間隔:148417 毫秒

<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用的執行緒 CPU:核心 171 ms,使用者 205515 ms。 處理序利用率 98%。 系統閒置 0%。 間隔:209729 ms。

<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用執行緒 CPU:核心 218 毫秒,使用者 266343 毫秒。 處理序利用率 98%。 系統閒置 0%。 間隔:271588 毫秒。

<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用執行緒 CPU:核心 234 毫秒,使用者 325156 毫秒。 處理序利用率 97%。 系統閒置 0%。 間隔:333671 ms。
<時間戳記> 伺服器處理序 0:0:0 (0xf94) 背景工作角色0x00000000817481A0在排程器 0 上似乎未屈服。 對話建立時間:12925321224306。 大約使用的執行緒 CPU:核心 296 毫秒,使用者 386000 毫秒。 處理序利用率 97%。 系統閒置 0%。 間隔:396370 ms。

原因

發生此問題的原因是 SQL Server 2008 或 SQL Server 2008 R2 未正確釋出排程器。

解決方式

累積更新資訊

SQL Server 2008 R2

此問題的修正程式最初在累積更新 5 中發行。 如需有關如何取得 SQL Server 2008 R2 的累積更新套件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

2438347 SQL Server 2008 R2 的累積更新套件 5 注意:由於組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和先前 SQL Server 2008 R2 修正程式版本中包含的所有安全性修正程式。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在 SQL Server 2008 R2 發行之後所發行的 SQL Server 2008 R2 組建 (機器翻譯)

SQL Server 2008 Service Pack 1

此問題的修正程式最初在 SQL Server 2008 Service Pack 1 的累積更新 10 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2279604 累積更新套件 10 for SQL Server 2008 Service Pack 1 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些都包含在上一個 SQL Server 2008 修正程式版本中。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

970365 發行 SQL Server 2008 Service Pack 1 之後所發行的 SQL Server 2008 組建Microsoft SQL Server會為特定 SQL Server Service Pack 建立 Hotfix。 您必須將 SQL Server 2008 Service Pack 1 Hotfix 套用至 SQL Server 2008 Service Pack 1 的安裝。 預設情況下,SQL Server Service Pack 中提供的任何 Hotfix 都會包含在下一個 SQL Server Service Pack 中。

SQL Server 2008 Service Pack 2

此問題的修正程式最初在 SQL Server 2008 Service Pack 2 的累積更新 1 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2289254 SQL Server 2008 Service Pack 2 的累積更新 1 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些都包含在上一個 SQL Server 2008 修正程式版本中。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2402659 發行 SQL Server 2008 Service Pack 2 之後所發行的 SQL Server 2008 組建

因應措施

若要解決此問題,請使用全文檢索搜尋同義字來定義述詞的同義字。

若要執行這項操作,請使用 FORMSOF 函數搭配 THESAURUS 值,然後將所有關鍵字新增為參數。

針對「徵狀」一節中所述的範例,以下是範例查詢的更新版本: 從 test_table 選取 * where Contains (*,'FORMSOF (THESAURUS,“architectural”,“engineer”,“Mechanical”,“Engineering”,“Electronics”,“Engineer”,“Electrical”,“Control”,“Systems”,“Project”,“Manager”,“Manufacturing”,“Metallurgy”,“Metallurgist”,“Process”,“Design”,“Technology”,“Production”,“Quality”,“Control”,“Civil”,“Graduate”,“Recruitment”,“consultant”,”實習生“,”recruitment“) ')

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

如需有關 CONTAINSTABLE 函數的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:

關於 CONTAINSTABLE 函數的一般資訊如需有關 SQL Server 累加式服務模型的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

935897 來自 SQL Server 團隊之可傳遞解決回報問題的 Hotfix 的累加服務模型 (機器翻譯)

如需有關 SQL Server 更新命名架構的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

822499 Microsoft SQL Server 軟體更新套件的新命名架構如需有關軟體更新術語的詳細資訊,請按一下下面的文章編號,檢視「Microsoft知識庫」中的文章:

824684 描述Microsoft軟體更新所使用的標準術語說明