Kiedy ustaliłem, że przyczyną problemu jest połączenie ADO.NET, ten wątek doprowadził mnie do odpowiedzi.
Zasadniczo połączenia przez Sql Server Management Studio (SSMS) domyślnie mają SET ARITHABORT ON
. Połączenia ADO.NET nie.
Ustawianie ARITHABORT OFF
a wykonanie zapytania bezpośrednio przez SSMS daje mi ten sam długi czas odpowiedzi.
Główną różnicą w przypadku uruchamiania z tym ustawieniem lub bez niego jest to, że dla dwóch wywołań tworzony jest inny plan zapytania. Kiedy ARITHABORT
był OFF
, polecenie SSMS użyje wstępnie skompilowanego buforowanego planu zapytań, którego używało połączenie ADO.NET, a zatem przekroczy limit czasu.
Uruchamiając następujące polecenia jako administrator bazy danych, wszystkie zapytania działają zgodnie z oczekiwaniami, niezależnie od ARITHABORT
ustawienie.
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Mogę tylko założyć, że skompilowany plan zapytań został uszkodzony lub nieważny.
Pójdę z tym jako rozwiązaniem (głosowałem na odpowiedź) w drugim wątku
Dzięki.