我们正在处理一个随机发生的非常奇怪的奇怪问题(仅在多年没有问题后的上个月):
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
基本上,我们的应用程序使用“FREETEXT”T-SQL 语句执行 SQL FULL TEXT 查询,以便搜索包含数百万条记录的全文目录并将结果“连接”到另一个表。
现在,根据搜索到的文本,查询可以在 300 毫秒内执行,但可以持续超过 30-50 秒。CommandTimeout 设置为 60 秒:但是,在查询运行超过 13 小时的 10-20k 个类似请求中,它发生了 2 次......由于渐进式锁定增加,导致系统逐渐锁定。
分析发生这种情况时的等待任务,我们发现会话正在等待 PWAIT_RESOURCE_SEMAPHORE_FT_PARALLEL_QUERY
这是一种未记录的锁类型...
尝试终止会话时,KILLED/ROLLBACK 中仍然存在超过 45 分钟,并且会话一直保持“估计回滚完成 0%,估计剩余时间 0”。
唯一的解决方案是重新启动 SQL SERVER ... 之后问题就消失了。
该环境是我们无法访问的客户生产环境。
现在,我们正在尝试了解调查问题的最佳方法和/或这些锁的可能解决方案:
- 由于我们正在处理 FT,它是一种分布式查询:这会导致在某些情况下无法正确管理超时吗?
- 这是由数据库上的某种“脏数据”引起的可能的错误吗?
- 我们可以做些什么来避免无法终止/终止此会话?
真正让我烦恼的是“如果 CommandTimeout 设置为 1 分钟,命令如何运行超过 13 小时?” ...这是胡说八道:也许原因是在SQL-FT流程接口的同步故障上找到的?
预先感谢您的任何帮助。