I got an email from a friend this morning asking if I had a clustered resource for the Full-Text Search (FTS) service (actually called the SQL Full-Text Filter Daemon Launcher service). I pondered this for a few seconds and didn’t recall seeing one, so I logged on to one of my 2008 R2 test clusters and took a look. Nope, no FTS resource exists.
This made me a little concerned. If there’s no resource and the service fails or crashes would the cluster failover? To test this I logged on to one of the nodes and stopped the service.
Nothing happened.
The service stopped but there was no cluster failover or anything. As the FTS service is critical I thought this would break FTS. To test this out I created a new table, threw in some values and created a new Full-Text Index.
SET NOCOUNT ON;
/* Create the table */
CREATE TABLE test
(
c1 INT IDENTITY(1, 1) ,
c2 NVARCHAR(MAX) DEFAULT 'some text'
);
/* Add the PK */
ALTER TABLE test ADD CONSTRAINT Test_PK PRIMARY KEY CLUSTERED (c1);
/* Insert some records so we have something to see */
INSERT INTO test
DEFAULT VALUES
GO 500
/* Create the FT catalog and index */
CREATE FULLTEXT CATALOG [testft] AS DEFAULT;
CREATE FULLTEXT INDEX ON dbo.test (c2)
KEY INDEX Test_PK;
/* Wait a few seconds for population to take place and then query the FTI */
SELECT TOP 100
*
FROM test
WHERE CONTAINS ( c2, 'text' )
I was expecting this to not work as I’d killed off the service.
Surprisingly I got results. How had that happened?
I went back to the server and found that the FTS service had started back up again. I killed it, ran the select statement again and still got results.
I read the description of the FTS service which states that it will “launch the full-text filter daemon process”. I went in search of that and killed off the fdhost.exe process and once more ran the query. This time I got an error which appears completely unrelated but is caused by the fdhost.exe process not running.
Msg 30053, Level 16, State 102, Line 1
Word breaking timed out for the full-text query string. This can happen if the wordbreaker took a long time to process the full-text query string, or if a large number of queries are running on the server. Try running the query again under a lighter load.
Now FTS was truly dead but I wanted to see if it could be resurrected without any intervention from me.
By default Full-Text indexes are created with automatic change tracking, so I just added a few more rows to the table to see what would happen.
Change tracking kicked in and SQL Server kicked off the FTS service, which in turn launched the fdhost.exe process. With fdhost.exe running I was then able to run the Full-Text query again and return results.
I have to say I was initially freaked out by there not being any kind of resource to manage Full-Text Search but it turns out that you really don’t need one. SQL handles it all behind the scenes for you. Excellent work Microsoft!