Я пытаюсь отладить источник тайм-аута SQL в поддерживаемом мной веб-приложении. У меня есть исходный код кода C #, поэтому я точно знаю, какой код выполняется. Я отлаживал приложение вплоть до строки, которая выполняет код SQL, время ожидания истекло, и я наблюдаю за выполнением запроса в профилировщике SQL.
Когда этот запрос выполняется из Интернета, он истекает через 30 секунд. Однако, когда я вырезал / вставлял запрос точно так, как представлено в Profiler, помещал его в SSMS и запускал, он возвращался почти мгновенно. Я отследил проблему с тем, что для ARITHABORT установлено значение OFF в соединении, используемом в Интернете (то есть, если я выключу ARITHABORT в сеансе SSMS, он будет работать в течение длительного времени, и если я снова включу его, он запустится очень быстро). Однако, читая описание ARITHABORT, кажется, что это не применимо ... Я просто делаю простой SELECT, и никаких арифметических действий не выполняется вообще ... только одно INNER JOIN с условием WHERE:
Почему ARITHABORT OFF вызывает такое поведение в этом контексте? Есть ли способ изменить настройку ARITHABORT для этого подключения из SSMS? Я использую SQL Server 2008.