SQL Хранимая процедура: низкая производительность, пока текст не будет изменен - PullRequest
0 голосов
/ 21 марта 2020

Недавно мы столкнулись со странной проблемой. У нас есть много хранимых процедур в базе данных SQL Azure, и кажется, что некоторые из них продолжают выбирать плохие планы для выполнения запроса. Мы обновляем статистику по базам данных каждый вечер. Когда мы видим, что время хранимой процедуры истекает снова и снова, мы пытались выполнить sp_recompile, передавая имя процедуры, и она перекомпилируется, но не решает проблему плохого плана. Мы попытались на самом деле перезапустить инструкцию ALTER PROCEDURE (без изменения фактического содержания процедуры), и это ничего не дало. Затем по какой-то причине мы меняем текст процедуры, добавляя в конце новую строку перед оператором END. Когда мы делаем это и запускаем инструкцию ALTER PROCEDURE, процедура неожиданно включается и снова быстро запускается.

Я предполагаю, что предупреждение о тексте процедуры «меняет» процедуру больше, чем процедура sp_recompile, и вызывает «более сложную» перекомпиляцию, и, таким образом, выбирается лучший план запроса? Проблема заключается в том, что, хотя это решает проблему, теперь существует способ поддерживать систему из более чем 100 производственных баз данных, где это может происходить случайным образом. Кто-нибудь еще видел этот тип вне вопроса и знает, в чем может быть основная проблема? Как поддерживать такую ​​систему?

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