SQL-запрос периодически прерывается, любой ALTER немедленно исправляет это - PullRequest
0 голосов
/ 27 февраля 2019

У меня довольно простой SQL-запрос (SQL Server 2016).Я извлекаю около 15 столбцов из нескольких простых внутренних и левых объединений в 8 таблицах, у которых все имеют WITH (NOLOCK) в объединении.Мое предложение where проверяет несколько строковых, уникальных идентификаторов и битовых значений.Хранимая процедура не имеет никаких вычислений, никаких циклов / курсоров / операторов case и т. Д. Это очень просто.

По какой-то причине наше приложение периодически зависает из-за истечения времени ожидания вызова SQL.Когда я перехватываю вызов в профилировщике и запускаю его в SSMS, он запускается менее чем за секунду, но из приложения он просто не завершается.

Однако, если я запишу команду ALTER в запросе и просто добавлюпустая строка и выполнить изменение, проблема исчезнет, ​​и вызовы будут выполняться мгновенно.Внесенные мною изменения не являются чем-то существенным, просто изменение запроса каким-то образом, кажется, разблокирует его.

Кто-нибудь знает, что может быть причиной этого?Я не вижу никаких замков, когда время истекает.Я думал, может быть, плохой план выполнения кэшируется?

Единственная другая странность заключается в том, что это выполняется из старого унаследованного приложения, нашего последнего в старой классической Asp.Но это не похоже на веб-сервер или архитектуру, а только на базу данных.

...