次の方法で共有


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

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 スレッド モデルの概要と使用方法」を参照してください。