故障排除:全文索引性能由于筛选进程而变慢

在填充全文索引时,全文引擎使用以下两种类型的筛选器:多线程筛选器和单线程筛选器。有些文档(如 Microsoft Word 文档)使用多线程筛选器进行筛选。另外一些文档使用单线程筛选器进行筛选,如 Adobe Acrobat 可移植文档格式 (PDF) 文档。

为了安全起见,在 SQL Server 2008 中,筛选器是由筛选器后台程序宿主进程加载的。服务器实例对所有多线程筛选器使用多线程进程,并对所有单线程筛选器使用单线程进程。如果使用多线程筛选器的文档包含使用单线程筛选器的嵌入文档,全文引擎将启动单线程进程以处理嵌入文档。例如,在遇到包含 PDF 文档的 Word 文档时,全文引擎使用多线程进程来处理 Word 内容,并启动单线程进程以处理 PDF 内容。但是,单线程筛选器可能无法在此环境中正常工作,并且可能会破坏筛选进程的稳定性。在某些频繁出现此类嵌入的环境中,它可能会导致筛选进程崩溃。如果发生这种情况,全文引擎会将任何失败的文档(如包含嵌入 PDF 内容的 Word 文档)重新传送到单线程筛选进程。如果频繁进行重新传送,将会导致全文索引进程性能下降。

若要解决该问题,必须将容器文档(此处为 Word 文档)的筛选器标记为单线程筛选器。可以更改筛选器注册表值,以便将给定筛选器标记为单线程筛选器。若要将筛选器标记为单线程筛选器,您需要将筛选器的 ThreadingModel 注册表值设置为 Apartment Threaded。有关单线程单元的信息,请参阅了解和使用 COM 线程模型