Dépannage : lenteur des performances de l'indexation de texte intégral en raison du processus de filtrage
Lors de l'alimentation d'un index de recherche en texte intégral, le Moteur d'indexation et de recherche en texte intégral utilise deux types de filtres : des filtres multithreads et des filtres monothreads. Certains documents, tels que les documents Microsoft Word, sont filtrés à l'aide d'un filtre multithread. D'autres, tels que les documents PDF (Portable Document Format) d'Adobe Acrobat, sont filtrés à l'aide d'un filtre monothread.
Pour des raisons de sécurité, dans SQL Server 2008, les filtres sont chargés par des processus hôtes de démon de filtre. Une instance de serveur utilise un processus multithread pour tous les filtres multithreads et un processus monothread pour tous les filtres monothreads. Lorsqu'un document qui utilise un filtre multithread contient un document incorporé qui utilise un filtre monothread, le Moteur d'indexation et de recherche en texte intégral lance un processus monothread pour le document incorporé. Par exemple, lorsqu'il rencontre un document Word qui contient un document PDF, le Moteur d'indexation et de recherche en texte intégral utilise le processus multithread pour le contenu Word et lance un processus monothread pour le contenu PDF. Toutefois, un filtre monothread peut ne pas fonctionner correctement dans cet environnement et peut déstabiliser le processus de filtrage. Dans certaines circonstances, lorsque ce type d'incorporation est courant, cette déstabilisation peut provoquer des blocages du processus de filtrage. Dans ce cas, le Moteur d'indexation et de recherche en texte intégral réachemine tout document ayant subi un échec (par exemple, un document Word avec du contenu PDF incorporé) vers le processus de filtrage monothread. Si le réacheminement a lieu fréquemment, il en résulte une détérioration des performances du processus d'indexation de texte intégral.
Pour contourner ce problème, marquez le filtre du document conteneur (Word dans le cas présent) en tant que filtre monothread. Vous pouvez modifier la valeur de Registre concernée pour marquer un filtre donné en tant que filtre monothread. Pour ce faire, vous devez affecter à la valeur de Registre ThreadingModel pour le filtre la valeur Apartment Threaded. Pour plus d'informations sur les threads uniques cloisonnés (STA), consultez Understanding and Using COM Threading Models (en anglais).