У меня есть следующий сценарий:
После развертывания базы данных у нас есть сервер приложений .Net, который пытается выполнить хранимую процедуру.
Время ожидания в приложении составляет 30 секунд. Когда приложение впервые пытается выполнить сохраненный процесс, делается попытка создать новый план запроса, но это занимает более 30 секунд, и приложение имеет много тайм-аутов. Мой опыт показывает, что если хранимая процедура запускается вручную (с вводом репрезентативных данных) из SSMS, то при первом запуске она занимает около 1-2 минут, создается план, а затем приложение работает без сбоев.
Я работаю со сторонней компанией, и там есть администратор базы данных, который заявляет следующее:
" Ручной вызов этой хранимой процедуры создаст план, который зависит от используемых свойств соединения (SSMS), сгенерированный план не будет использоваться при вызове процедуры сервером приложений. "
Это правильно? Похоже, плохой дизайн, если используемый план запроса был связан со свойствами соединения? Есть ли разница между планом запроса, созданным, если вы запускаете хранимую процедуру вручную в SSMS по сравнению с тем, когда она выполняется приложением?
Если это так, каков оптимальный способ решения этой проблемы? Является ли увеличение времени ожидания единственным вариантом?