KB2344600 - 修正: SQL Server 2008 または SQL Server 2008 R2 で多くの OR および AND 述語と一緒に CONTAINSTABLE 関数を使用すると、"Non-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 SQL Server 2008 の修正を 1 つのダウンロード可能なファイルとして配布しています。 修正は累積的であるため、新しいリリースの修正には、以前のリリースの SQL Server 2008 の修正に含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。マイクロソフトでは、Microsoft SQL Server 2008 または SQL Server 2008 R2 の修正を 1 つのダウンロード可能なファイルとして配布しています。 修正は累積的であるため、各新しいリリースには、以前の SQL Server 2008 または SQL Server 2008 R2 の修正プログラム リリースに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。

現象

たとえば次のようなシナリオを考えてみます。

  • Microsoft SQL Server 2008 または SQL Server 2008 R2 の条件で、CONTAINSTABLE 関数と多くの OR および AND 述語を使用するフルテキスト検索クエリがあります。 たとえば、次の 50 個の AND 演算があります。Declare @Keywords varchar(4000) = NULL

    set @Keywords= N'((((((((((((((((((((((((((((((((((((((((((((((((((((
    ("TOKarchitect" または "architectural")
    AND ("TOKengineer" または "engineer"))
    AND "gineer") AND ("TOKmechanical" OR "Mechanical"))
    AND ("TOKengineer" または "Engineering"))
    AND ("TOKelectronic" または "Electronics")) AND ("TOKengineer" または "engineer")) AND ("TOKelectronic" または "Electronics")) AND ("TOKengineer" または "Engineering")) AND ("TOKelectric" または "Electrical")) AND ("TOKengineer" または "engineer")) AND ("TOKengineer" または "Engineer")) AND ("TOKengineer" または "Engineering")) AND ("TOKsystem" または "Systems")) AND ("TOKengineer" または "engineer")) AND ("TOKproject" または "Project")) AND ("TOKmanager" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "OR "Control")) AND ("TOKsystem" または "Systems")) AND ("TOKengineer" または "engineer")) AND ("TOKproject" または "Project")) AND ("TOKmanager" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "MANAGER")) AND ("TOKengineer" または "Control")) AND ("TOKsystem" または "Systems")) AND ("TOKengineer" または "engineer")) AND ("TOKproject" または "Project")) AND ("TOKmanager" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "MANAGER")) AND ("TOKengineer" または "Control")) AND ("TOKsystem" または "Systems")) AND ("TOKproject" または "Project")) AND ("TOKmanager" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "Control")) AND ("TOKsystem" または "Systems")) AND ("TOKengineer" または "engineer")) AND ("TOKproject" または "Project")) AND ("TOKmanager" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または "Manager")) AND ("TOKengineer" または「エンジニアリング」) AND 「スキーム」) AND (「TOKmanufacture」または「Manufacturing」)) AND (「TOKengineer」または「エンジニア」)) AND (「TOKmetallurgist」または「Metallurgy」) AND (「TOKmetallurgist」または「Metallurgist」) AND (「TOKprocess」または「Process」) AND (「TOKproduct」または「Technology」)) AND (「TOKproduct」または「Production」)) AND (「TOKengineer」または「Engineer」)) AND (「TOKengineer」または「Quality」)) AND (「TOKengineer」または「engineer」)) AND (「TOKachieveality」または「Quality」)) AND (「TOKcontrol」または「Control」)) AND (「TOKengineer」または「エンジニア」)) AND 「メカトロニクス」) AND (「TOKcivil」または「Civil」) AND (「TOKengineer」または「エンジニア」) AND (「TOKcivil」または「Civil」)) AND (「TOKengineer」または「Engineering」)) AND (「TOKdesign」または「Engineering")) AND (「TOKengineer」または「Engineering」)) AND (「TOKdesign」または「Design」)) AND (「TOKengineer」または「Engineer」)) AND (「TOKgraduate」または「Graduate」)) AND (「TOKgraduate」または「Engineer」)) AND (「TOKgraduate」または「Graduate」)) AND (「TOKgraduate」または「Graduate」)) AND (「TOKengineer」または「engineering」)) AND (「TOKgraduate」 または「卒業生」)) AND ") ANDNOT(") AND ("TOKRecruitment" OR "Recruitment")) AND ("TOKconsultant" OR "consultant")) AND ("TOKtrainee" または "trainee")) AND ("TOKRecruitment" または "recruitment"))'

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

  • クエリを実行します。

このシナリオでは、"Non-yielding スケジューラ" エラーが発生する可能性があります。 さらに、SQL Server 2008 または SQL Server 2008 R2 のアプリケーション ログ フォルダーにミニダンプ ファイルが生成され、次のエラーが SQL Server エラー ログ ファイルに記録されます。

注

<タイム スタンプ> 'dbghelp.dll' バージョン '4.0.5' を使用しているサーバー

<タイム スタンプ> サーバー ***spid 0 のスレッド コンテキストを取得できない
<タイム スタンプ> サーバー *
*******************************************************************************

<タイム スタンプ> サーバー *

<タイム スタンプ> サーバー * スタック ダンプの開始:

<タイム スタンプ> サーバー * <Time> spid <SPID>
<タイム スタンプ> サーバー *

<タイム スタンプ> サーバー * Non-yielding スケジューラ

<タイム スタンプ> サーバー *

<タイム スタンプ> サーバー *
*******************************************************************************

ダンプの<タイム スタンプ> サーバー スタック署名が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 用のこの累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

2438347 SQL Server 2008 R2 の累積的な更新プログラム パッケージ 5 (注: ビルドは累積的であるため、新しい修正プログラムの各リリースには、以前の SQL Server 2008 R2 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

981356 SQL Server 2008 R2 のリリース以降にリリースされた SQL Server 2008 R2 のビルド

SQL Server 2008 Service Pack 1

この問題の修正プログラムは、SQL Server 2008 Service Pack 1 の累積的な更新プログラム 10 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2279604 SQL Server 2008 Service Pack 1 の累積的な更新プログラム パッケージ 10 注: ビルドは累積的であるため、新しくリリースされた各修正プログラムには、以前の SQL Server 2008 更新プログラム リリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

970365 SQL Server 2008 Service Pack 1 以降にリリースされた SQL Server 2008 ビルドには、特定の SQL Server Service Pack 用に Microsoft SQL Server 2008 修正プログラムが作成されます。 SQL Server 2008 Service Pack 1 のインストールには、SQL Server 2008 Service Pack 1 修正プログラムを適用する必要があります。 既定では、1 つの SQL Server Service Pack で提供されているすべての修正プログラムは、次の 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 注: ビルドは累積的であるため、新しくリリースされた各修正プログラムには、以前の SQL Server 2008 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2402659 SQL Server 2008 Service Pack 2 以降にリリースされた SQL Server 2008 ビルド

回避策

この問題を回避するには、フルテキスト検索類義語辞典を使用して述語の類義語を定義します。

これを行うには、FORMSOF 関数を THESAURUS 値と一緒に使用し、すべてのキーワードをパラメーターとして追加します。

「現象」セクションで説明されている例の例を次に示します。 Select * from 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","Trainee","recruitment")')

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

CONTAINSTABLE 関数の詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。

CONTAINSTABLE 関数に関する一般情報SQL Server の増分サービス モデルの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

935897 報告された問題に対する修正プログラムを提供する SQL Server チームの増分サービス モデル (ISM) について

SQL Server の更新プログラムの命名方式の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。

822499 Microsoft SQL Server ソフトウェア更新プログラム パッケージの新しい命名スキーマソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明