Сеанс полнотекстового поиска SQL Server заблокирован навсегда

#sql-server #full-text-search #sql-server-2017 #command-timeout

Вопрос:

мы имеем дело с очень странной странной проблемой, которая возникает случайным образом (только в прошлом месяце после многих лет отсутствия проблем).:

Microsoft SQL Server 2017 (RTM) — 14.0.1000.169 (X64)

В основном наше приложение выполняет полнотекстовый запрос SQL с использованием оператора T-SQL «FREETEXT» для поиска в полнотекстовом каталоге миллионов записей и «соединяет» результат с другой таблицей.

Теперь, в зависимости от искомого текста, запрос может выполняться за 300 мс, но может длиться более 30-50 секунд. Время выполнения команды равно 60 секундам: однако в 2 случаях из 10-20 тысяч аналогичных запросов запрос выполнялся более 13 часов… что приводило к постепенной блокировке системы из-за постепенного увеличения блокировки.

Анализируя задачи ожидания, когда это произошло, мы обнаружили, что сеанс ожидал запроса PWAIT_RESOURCE_SEMAPHORE_FT_PARALLEL_QUERY

Это недокументированный тип блокировки…

Задачи Ожидания

Попытка убить сеанс та же самая оставалась в УБИТОМ/ОТКАТЕ более 45 минут, и сеанс оставался «Предполагаемое завершение отката 0%, расчетное время осталось 0» в течение всего этого времени.

Единственным решением БЫЛО ПЕРЕЗАПУСТИТЬ SQL-СЕРВЕР… после этого проблема исчезла.

Среда-это производственная среда заказчика, к которой у нас нет доступа.

Теперь мы пытаемся понять, как лучше всего исследовать проблему и/или возможное решение этих блокировок:

  • Поскольку мы имеем дело с FT, это своего рода распределенный запрос: может ли это привести к неправильному управлению тайм-аутами в определенных случаях?
  • Является ли это возможной ошибкой, вызванной какими-то «грязными данными» в базе данных?
  • Есть ли что-то, что мы можем сделать, чтобы избежать невозможности завершить/убить этот сеанс?

Что меня на самом деле беспокоит, так это «Как команда может выполняться более 13 часов, если время выполнения команды равно 1 минуте?» … это чушь: может быть, причина кроется в сбое в синхронизации интерфейса процесса SQL-FT?

Заранее благодарю вас за любую помощь.