FIX: SQL Server Full-Text Population by Using a Single-Threaded Filter DLL or a PDF Filter DLL May Not Succeed (323040)



The information in this article applies to:

  • Microsoft SQL Server 2000 (all editions)

This article was previously published under Q323040
BUG #: 357442 (SHILOH_BUGS)

IMPORTANT: This article contains information about modifying the registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, click the following article number to view the article in the Microsoft Knowledge Base:

256986 Description of the Microsoft Windows Registry

SYMPTOMS

SQL Server permits full-text population of documents that are stored in the database through filter dynamic link libraries (DLLs) that can interpret the document file format, and that can expose the data by using the IFilter interface. Attempts to populate a SQL Server Full Text Search (FTS) catalog with a single-threaded IFilter DLL may intermittently fail, and various symptoms may occur, including but not limited to:
  • Errors such as the following may appear in the Application event log:
    SQLFTHNDLR Information One or more documents stored in image columns with extension '.pdf' did not get full-text indexed because loading the filter failed with error '0x1'.
    NOTE: These documents are not passed to MSSearch for indexing; therefore, this failure is not reflected at the end of the crawl summary statistics.
  • The full-text population daemon, MSSdmn.exe, may encounter an unhandled exception, which may appear as a Dr. Watson report for this process.
  • Full-text searches may return incomplete results even if the population is complete.
This article is only applicable when FTS population is using a single-threaded filter DLL. (For example, the Adobe PDF IFilter version 5.0 for .pdf documents.)

CAUSE

This problem occurs because the SQL Server FTS population process is multithreaded and because the IFilter DLL is not thread-safe, populating the catalog from multiple threads at the same time may cause unpredictable behavior in the filter.

RESOLUTION

To resolve this problem, obtain the latest service pack for Microsoft SQL Server 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

290211 INF: How To Obtain the Latest SQL Server 2000 Service Pack

WORKAROUND

WARNING: If you use Registry Editor incorrectly, you may cause serious problems that may require you to reinstall your operating system. Microsoft cannot guarantee that you can solve problems that result from using Registry Editor incorrectly. Use Registry Editor at your own risk.

To work around this problem, set the following registry value to 1 to restrict the gathering process to a single thread:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager
RobotThreadsNumber (REG_DWORD)

The default value is 0, which allows multithreaded access to any filter DLLs. With the registry value set to 1, catalog population times may increase significantly because the population is restricted to indexing a single document at a time. This restricted speed is the maximum that can be expected when you are using a single-threaded IFilter DLL because concurrent access to the DLL is not safe. However, setting this registry key also restricts the gathering process for any thread-safe filter DLLs to a single thread, which may slow population times for document types that do not encounter this problem.

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

This problem was first corrected in Microsoft SQL Server 2000 Service Pack 3.

MORE INFORMATION

The work around that is included in this article and the fix that is included in SQL Server 2000 Service Pack 3 (SP3) to serialize the gathering process are separate. SQL Server 2000 SP3 includes a single-threaded filter daemon that loads the PDF and other single-threaded filters. In previous versions of SQL Server 2000, the single-threaded PDF filter was loaded in a multi-threaded filter daemon, and the work around serialized the process until a single-threaded filter daemon became available. In SQL Server 2000 SP3, you do not have to modify the registry to correct this problem.

Modification Type:MajorLast Reviewed:1/20/2004
Keywords:kbSQLServ2000sp3fix kbbug kbpending KB323040