SQL Server 2025 CU4: The IStemmer Bug Fix – Did Microsoft Solve the FTS Crash or not? (Test Day 3)
Before we dive into today's topic, if you missed my previous post you can take a look at Understand stemming in SQL Server to become a better DBA. 👉 If you found this deep-dive helpful, feel free to check out the ads—your support helps me keep creating high-quality SQL Server content for the community, 20.04.2026
SQL Server 2025 CU4: Did Microsoft Finally Solve the FTS Crash? Test Day 3
In this post, I’ll reveal why your Full-Text Search queries might unexpectedly crash when using specific languages, and how SQL Server 2025 CU4 finally fixes the IStemmer bug. Stop letting undocumented language issues break your production code!
TL;DR
✔️ KB 5071334 fixes Full-Text Search failures for version 2 languages missing an IStemmer 🛠️ ✔️ The bug caused hard errors when usingFREETEXTorFORMSOF(INFLECTIONAL...)💣 ✔️ You no longer need clunky workarounds for unsupported linguistic stems 🚀 ✔️ We provide the exact T-SQL to test and validate this fix in your environment
Hi SQL SERVER Guys,
We all know how important it is to make every second count when managing SQL Server environments. Unhandled exceptions in your data layer can cause application-wide outages. Today, we are diving into a nasty Full-Text Search bug fixed in SQL Server 2025 CU4 that was silently breaking inflectional queries. Let's dive into these game-changing features!
🔍 What it really is: The IStemmer Bug (KB 5071334)
As we discussed in the previous post, stemming is the process of reducing a word to its base or root form. SQL Server uses language-specific components (called Stemmers, implementing the IStemmer interface) to expand search terms when you use operators like FORMSOF(INFLECTIONAL, 'run').
💣 The Problem: SQL Server relies on "Version 2" word breakers for many languages. However, not all of these languages actually implement an IStemmer. Before CU4, if a user ran an inflectional query (using FREETEXT, FREETEXTTABLE, or FORMSOF(INFLECTIONAL, ...)) against a column configured with one of these unsupported languages, the engine didn't gracefully fall back to an exact match. Instead, it threw a hard error, completely failing the query and potentially crashing your application logic.
✔️ The Fix: With KB 5071334 in CU4, Microsoft finally addressed this engine flaw. Now, if a version 2 language lacks an IStemmer, SQL Server gracefully handles the query instead of throwing an exception, treating the term appropriately without breaking the execution flow.
🧪 Let's verify it! (Because we don't trust, we test)
As Senior DBAs, we never take release notes at face value. We test them. Here is the exact T-SQL script you can run on your SQL Server 2025 instances to verify if CU4 is truly doing its job.
-- 1. Setup a test environment CREATE FULLTEXT CATALOG FTS_Test_Catalog AS DEFAULT; GO CREATE TABLE dbo.StemmerTest ( ID INT IDENTITY(1,1) CONSTRAINT PK_StemmerTest PRIMARY KEY, DocumentText NVARCHAR(MAX) ); GO INSERT INTO dbo.StemmerTest (DocumentText) VALUES (N'Bu, CU4 düzeltmesi için bir testtir.');
GO -- 2. Create the Full-Text Index using an LCID known to trigger the V2 Stemmer bug -- (LCID 1055 corresponds to Turkish) CREATE FULLTEXT INDEX ON dbo.StemmerTest(DocumentText LANGUAGE 1055) KEY INDEX PK_StemmerTest; GO -- Give it a moment to populate... WAITFOR DELAY '00:00:05'; -- 3. The Ultimate Test (Execute this) BEGIN TRY SELECT * FROM dbo.StemmerTest WHERE CONTAINS(DocumentText, 'FORMSOF(INFLECTIONAL, "test")'); END TRY BEGIN CATCH PRINT '💣 ERROR DETECTED (Pre-CU4 behavior):'; PRINT ERROR_MESSAGE(); END CATCH;
If you run this on CU3 or earlier, you will hit the CATCH block with an error complaining about the missing stemmer or unsupported forms.
Msg 30053, Level 16, State 102, Line 35
An error has occurred during the full-text query.
Common causes include: word-breaking errors or timeout, FDHOST permissions/ACL issues,service account missing privileges, malfunctioning IFilters,communication channel issues with FDHost and sqlservr.exe, etc.
And in CU4? you will get a clean execution...or not? Well not, the get the same error message.
Let's start to investigate...
To isolate the behaviour i have done the following test:
We tested several languages (LCIDs) to isolate the engine's behavior:
Italian/English: No errors (mature V4/V3 Stemmers).
Turkish (1055) / Bulgarian (1026): FAIL. These are the primary "triggers" for the bug, as they utilize Version 2 Word Breakers that do not correctly expose the
IStemmerinterface.
2. Engine Validation vs. Inflectional Logic
We distinguished between a simple search and an inflectional search:
CONTAINS(..., 'test')-> works (utilizes only the Word Breaker).CONTAINS(..., 'FORMSOF(INFLECTIONAL, "test")')-> fail (Error 30053). This confirms that the crash occurs the moment FDHOST attempts to instantiate the Stemmer.
3. Word Breaker Isolation Test
We utilized the DMV sys.dm_fts_parser to verify if the issue resided in the language binary or the search logic. Since the parser responds correctly but the FORMSOF query crashes, the issue is strictly within the Stemmer Mapping.
👉 At the ends, the lesson learned today is fundamental: Even if the CU is the cure, the system must sometimes be forced to take it.
Here some reasons why CU4 alone "might not be enough":
"Lazy" OS Components: SQL Server often continues to use the linguistic binaries loaded prior to the patch. It is mandatory to execute:
EXEC sp_fulltext_service 'load_os_resources', 1;to refresh the library of word breakers and stemmers registered in the operating system. I have done it without any luck.Zombie FDHOST Processes: The
fdhost.exeprocess can remain active between tests. A restart of the SQL Full-text Filter Daemon Launcher service is required to load the new CU4 fallback logic.Inconsistent Metadata: If an index was created under CU3, it may retain "dirty" references to the missing stemmer. The Senior solution is a complete REBUILD of the catalog or a drop/create of the index post-patching.
Fallback vs. Fix: Remember that CU4 does not "repair" the Turkish stemmer; it simply prevents SQL Server from crashing (Error 30053) by allowing it to perform a silent fallback. If you still see 30053, the fix has not been correctly "ingested" by the system.
🚀 My REAL Strategy
In my experience, never assume a patch works flawlessly in your specific linguistic context without testing it first. When Microsoft issues a fix for language-specific components like Full-Text Search, I immediately run a regression test loop against the specific LCIDs (Language Code Identifiers) used in my production tables. Always validate that the fallback behavior of the engine doesn't negatively alter your execution plans or silently hide valid search results. Trust the CU, but verify the execution! Always!
Official Sources:
📢 Support the Blog: Did you find this deep-dive helpful? The ads you see here are selected to reflect your interests. If a partner's offer catches your eye, give it a look! Your engagement helps me continue publishing premium SQL Server content for the community.
Biondi Luca @2026 - Sharing over 25 years of Gained Knowledge for Passion. Share if you like my posts!

Comments
Post a Comment