Хранимая процедура SQL Server RPC VS SSMS - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть хранимая процедура, которая принимает 1 параметр.Когда я запускаю хранимую процедуру из SQL Server Management Studio, она запускается через 2-4 секунды.Когда я звоню с помощью консольного приложения, это занимает более 30 секунд.SQL Server является удаленным, и SSMS и мое приложение запускаются с моего локального компьютера, поэтому я не думаю, что это проблема сети.

Я запустил SQL Server Profiler, чтобы попытаться отследить проблему, и я вижу одну вещь: когда он запускается из SSMS, он запускает оператор, перекомпилирует его, затем запускает его снова, затемзавершает его следующим образом:

SP:StmtStarting
SP:Recompile
SQL:StmtRecompile
SP:StmtStarting
SP:StmtCompleted

2 записи перекомпиляции имеют EventSubClass «2 - Статистика изменена»

Из приложения я вижу только записи для SP: StmtStarting & SP: StmtCompleted, нет записей перекомпиляции.

Я вызываю точно такую ​​же хранимую процедуру с тем же значением параметра.Почему SSMS перекомпилируется на основе статистики, а мое консольное приложение - нет?

1 Ответ

0 голосов
/ 05 марта 2019

После исследования и устранения неполадок, похоже, это полностью связано с SET_ARITHABORT_ON.По умолчанию для SSMS установлено значение «ON», в то время как для клиента .net sql по умолчанию установлено значение «OFF», поэтому в нем использовались 2 разных плана выполнения, хотя я не совсем уверен, почему эти два плана так сильно различаются.

Я переопределил метод OpenConnection (), чтобы открыть соединение, установил его в положение ON, и тогда мое приложение имело ту же производительность, что и SSMS.Я надеюсь, что это поможет любому, кто наткнется на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...