トラブルシューティング : フィルタ処理によるフルテキスト インデックス作成のパフォーマンスの低下

Full-Text Engine では、フルテキスト インデックスを設定するときに、マルチスレッド フィルタとシングル スレッド フィルタの 2 種類のフィルタを使用します。フィルタ処理するドキュメントに応じて、マルチスレッド フィルタを使用する場合 (Microsoft Word 文書など) と、シングル スレッド フィルタを使用する場合 (Adobe Acrobat Portable Document Format (PDF) ドキュメントなど) があります。

セキュリティ上の理由から、SQL Server 2008 では、フィルタはフィルタ デーモン ホスト プロセスによって読み込まれます。サーバー インスタンスでは、マルチスレッド フィルタに対してはすべてマルチスレッド処理が使用され、シングル スレッド フィルタに対してはすべてシングル スレッド処理が使用されます。マルチスレッド フィルタを使用するドキュメントにシングル スレッド フィルタを使用するドキュメントが埋め込まれていると、Full-Text Engine では埋め込まれたドキュメントに対してシングル スレッド処理を開始します。たとえば、PDF ドキュメントが埋め込まれた Word 文書の場合、Full-Text Engine では、Word の内容に対してはマルチスレッド処理を使用し、PDF の内容に対してはシングル スレッド処理を開始します。ただし、このような環境では、シングル スレッド フィルタが適切に機能しない場合があり、フィルタ処理が不安定になることがあります。このような埋め込みが通例であるような特定の状況では、不安定になった結果、フィルタ処理がクラッシュすることもあります。クラッシュが発生すると、エラーが発生したドキュメント (たとえば、PDF の内容が埋め込まれた Word 文書) がシングル スレッド フィルタ処理に再ルーティングされます。再ルーティングが頻繁に起こると、フルテキスト インデックス作成処理のパフォーマンスが低下します。

この問題を回避するには、コンテナ ドキュメント (この場合は Word) に対するフィルタとして、シングル スレッド フィルタを設定します。フィルタのレジストリ値を変更して、特定のフィルタをシングル スレッド フィルタとして設定できます。シングル スレッド フィルタとして設定するには、フィルタの ThreadingModel レジストリ値を Apartment Threaded に設定する必要があります。シングル スレッド アパートメントの詳細については、「COM スレッド モデルの概要と使用方法」を参照してください。