SQL Server全文搜索随机返回异常结果故障排查求助
SQL Server 全文搜索随机返回非预期结果问题
问题描述
SQL Server全文搜索服务已稳定无故障运行四年,近期开始返回错误检索结果:有时匹配结果少于预期,有时多于预期,完全相同的检索条件连续查询也会得到不同结果。该故障随机出现、时有时无,大部分情况下功能运行正常。
基础信息
- 对应全文表共包含30038条数据,更新频率极低,每周最多新增2条记录
- 所用MSSQL版本为11.0.7493.4
- 检索关键词为
mule时预期应返回14条匹配结果
相关代码
检索语句
SET NOCOUNT ON; SELECT [BID] FROM [StatConst].[revision].[SectFullText] WHERE CONTAINS(body, '"mule" ') and [hist] Is Null
表结构
BID int Body nvarchar(MAX) hashnum int hist int
排查方向与解决方案
1. 全文索引损坏/碎片检查
服务长期运行即使数据更新频率低,也可能出现全文索引逻辑损坏或碎片,这是偶发查询结果异常最常见的原因:
- 先执行目录健康检查命令,替换为实际使用的全文目录名称:
DBCC FULLTEXTCATALOG ('你的全文目录名称') WITH ALL_INDEXES, PHYSICAL_ONLY
- 若检查返回错误,或无报错但问题仍存在,直接重建对应表的全文索引,3万条数据的全量填充耗时极短:
ALTER FULLTEXT INDEX ON [StatConst].[revision].[SectFullText] START FULL POPULATION
重建完成后连续执行10次以上目标查询,验证结果是否稳定为14条。
2. 版本已知bug核实
当前使用的是SQL Server 2012(版本号11.0.7493.4属于2012 SP4分支),该版本存在多个官方确认的全文检索偶发bug,其中KB2979597直接对应「相同CONTAINS查询连续执行返回不同行数」的问题,可核实实例是否安装了该累积更新,若未安装优先打补丁验证。
3. 全文组件缓存与内存检查
全文断词器、筛选器的缓存异常,或者宿主进程内存不足被强制回收,也会导致随机匹配错误:
- 先清理全文目录缓存后重试查询:
DBCC FREEFULLTEXTCATALOG ('你的全文目录名称')
- 查看Windows系统日志和SQL Server错误日志,确认是否存在
fdhost.exe(全文筛选器后台程序)崩溃、内存不足的相关报错。
4. 执行计划异常排查
并行查询计划异常、参数嗅探也可能导致结果非确定,给查询加上如下提示测试:
SET NOCOUNT ON; SELECT [BID] FROM [StatConst].[revision].[SectFullText] WHERE CONTAINS(body, '"mule"') AND [hist] IS NULL OPTION (MAXDOP 1, RECOMPILE)
强制单线程执行、每次重编译计划,若多次执行结果稳定,说明是执行计划问题,后续可通过固定执行计划、禁用该语句并行度解决。
内容的提问来源于stack exchange,提问作者dbasnett
相关产品推荐
相关产品推荐

