#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?
Заранее благодарю вас за любую помощь.