KB2344600 - 修正:在 2008 SQL Server 或 2008 R2 中,使用 CONTAINSTABLE 函式與多個 OR 與 AND 謂詞SQL Server可能會發生「非yielding Scheduler」錯誤

套用到
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 修補程式作為一個可下載檔案發佈。 由於修補是累積性的,每個新版本都包含了先前 SQL Server 2008 修補釋版本中包含的所有熱修補與安全修補。Microsoft 將 Microsoft SQL Server 2008 或 SQL Server 2008 R2 修正作為一個可下載檔案發佈。 由於修補是累積性的,每個新版本都包含了先前 SQL Server 2008 或 SQL Server 2008 R2 修補釋版本中包含的所有熱修補與安全修補。

症狀

請考慮以下案例:

  • 你有一個全文搜尋查詢,使用了 CONTAINSTABLE 函數,並包含許多條件條件中的 CONTAINSTABLE 函數Microsoft SQL Server 2008 SQL Server 2008 R2。 例如,你有以下 50 個 AND 運算:宣告 @Keywords varchar (4000) = NULL

    設定 @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」) ) ) (「TOKmanufacture」或「Manufacturing」) ) (「TOKengineer」或「ENGINEER」) ) (「TOKmetallurgist」或「冶金學」) ) (「TOKmetallurgist」或「冶金學家」) ) (「TOKprocess」或「Process」) ) (「TOKTechnology」或「技術」) ) (「TOKproduct」或「生產」) ) (「TOKengineer」或「ENGINEER」) ) (「TOKQuality」或「QUALITY」) ) (「TOKENGINEER」或「ENGINEER」) ) (「TOKQuality」或「QUALITY」) ) (「TOKCONTROL」或「CONTROL」) ) ( TOK」TOK 工程師」或「工程師」) ) 以及「機電一體化」) (「TOK土木」或「土木」) ) (「TOKENGINEER」或「工程師」) ) (「TOK土木」或「土木」) ) (「TOKENGINEER」或「工程」) ) (」TOKdesign」或「DESIGN」) ) (「TOKENGINEER」或「ENGINEERING」) ) (「TOKdesign」或「DESIGN」) ) (「TOKENGINEER」或「ENGINEER」) ) (「TOKgraduate」或「GRADUATE」) ) (「TOKENGINEER」或「ENGINEER」) ) (「TOKgraduate」或「GRADUATE」) ) (「TOKENGINEER」或「ENGINEERING」) ) (「TOKENGINEER」或「ENGINEERING」) ) (「TOKgraduate」或「GRADUATE」) ) ) 而非 (」) (「申請」或「招募」) ) (「TOK顧問」或「顧問」) ) (「TOK培訓生」或「培訓生」) ) (「TOKRecruitment」或「招募」) )

    從 CONTAINSTABLE (test_table 選擇 * , *, @keywords1000)

  • 你執行查詢。

在這種情況下,可能會發生「非產生排程器」錯誤。 此外,SQL Server 2008 或 SQL Server 2008 R2 應用程式日誌資料夾會產生一個迷你傾印檔案,並在 SQL Server 錯誤日誌檔中記錄以下錯誤:

注意

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

<時間戳> 伺服器 ***無法取得 spid 0 的執行緒上下文
<時間戳> 伺服器 *
*******************************************************************************

<時間戳> 伺服器 *

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

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

<時間戳> 伺服器 * 非產生排程器

<時間戳> 伺服器 *

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

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

<時間戳記> 伺服器外部傾印程序回傳代碼0x20000001。 外部傾印程序沒有回傳錯誤。

<時間戳> 伺服器程序 0:0:0 (0xf94) 工作者 0x00000000817481A0 在排程器 0 上似乎沒有妥協。 串程建立時間:12925321224306。 約執行緒 CPU 使用時間:核心 62 毫秒,使用者 75187 毫秒。 流程利用率98%。 系統閒置 0%。 間隔:76403 毫秒。

<時間戳> 伺服器程序 0:0:0 (0xf94) 工作者 0x00000000817481A0 在排程器 0 上似乎沒有妥協。 串程建立時間:12925321224306。 約執行緒 CPU 使用:核心 125 毫秒,使用者 145250 毫秒。 流程利用率98%。 系統閒置 0%。 間隔:148417毫秒。

<時間戳> 伺服器程序 0:0:0 (0xf94) 工作者 0x00000000817481A0 在排程器 0 上似乎沒有妥協。 串程建立時間:12925321224306。 約執行緒 CPU 使用:核心 171 毫秒,使用者 205515 毫秒。 流程利用率98%。 系統閒置 0%。 間隔:209729毫秒。

<時間戳> 伺服器程序 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毫秒。
<時間戳> 伺服器程序 0:0:0 (0xf94) 工作者 0x00000000817481A0 在排程器 0 上似乎沒有妥協。 串程建立時間:12925321224306。 約執行緒 CPU 使用:核心 296 毫秒,使用者 386000 毫秒。 流程利用率97%。 系統閒置 0%。 間隔:396370 毫秒。

原因

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

解決方式

累積更新資訊

SQL Server 2008 R2

這個問題的修正最早是在累積更新 5 中釋出的。 欲了解更多如何取得 SQL Server 2008 R2 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2438347 2008 R2 SQL Server 累積更新包 註:由於建置是累積性的,每個新修正版本都包含了前一 SQL Server 2008 R2 版本中所有的熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

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

SQL Server 2008 服務包 1

此問題的修正最初於 SQL Server 2008 Service Pack 1 的累積更新 10 中釋出。 欲了解更多關於此累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2279604 2008 SQL Server 服務包 1 的累積更新包 10 備註:由於建置是累積式的,每個新修正釋版本都包含了前一SQL Server 2008 修正釋版本中包含的所有熱修補與安全修補。 Microsoft 建議你考慮套用包含此熱修補的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

970365 2008 SQL Server 2008 版本是在 2008 服務包 1 發布後釋出SQL Server Microsoft SQL Server 2008 熱修補是針對特定SQL Server服務包所建立的。 您必須對安裝 SQL Server 2008 Service Pack 1 SQL Server 熱修補程式。 預設情況下,SQL Server 服務包中提供的任何熱修正會包含在下一個 SQL Server 服務包中。

SQL Server 2008 Service Pack 2

此問題的修正最初於 SQL Server 2008 Service Pack 2 的累積更新 1 中釋出。 欲了解更多關於此累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2289254 2008 SQL Server 服務包 2 累積更新 注意 由於建置是累積式,每個新修正版本都包含了 2008 SQL Server 修正釋版本中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2402659 2008 服務包 2 發布後SQL Server SQL Server 2008 版本

因應措施

為了解決這個問題,可以使用全文搜尋詞庫來定義謂詞的同義詞。

為此,請使用 FORMSOF 函式與 THESAURUS 值,然後將所有關鍵字加入參數。

針對「症狀」部分所描述的範例,以下是範例查詢的更新版本:從test_table中選擇*,其中包含 (*、『 (THESAURUS的形式』、『建築學』、『工程師』、『機械學』、『工程學』、『電子學』、『工程師』、『電機』、『控制』、『系統』、『專案』、『經理』、『製造』、『冶金學』、『冶金師』、『製程』、『設計』、『技術』、『生產』、『品質』、『控制』、『土木』、『畢業生』、『招募』、『顧問』,實習生」、「招募」) )

狀態

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

參考資料

欲了解更多關於 CONTAINSTABLE 函式的資訊,請造訪以下 Microsoft 開發者網絡 (MSDN) 網站:

關於 CONTAINSTABLE 函數的一般資訊欲了解更多關於 SQL Server 增量服務模型的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

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

欲了解更多關於 SQL Server 更新命名架構的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

822499 Microsoft SQL Server軟體更新套件的新命名架構欲了解更多軟體更新術語,請點擊以下文章編號以瀏覽Microsoft知識庫中的文章:

824684 描述用於描述Microsoft軟體更新的標準術語