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