Проблема выполнения хранимой процедуры в моем коде - PullRequest
0 голосов
/ 30 января 2019

У меня была хранимая процедура, которая возвращает набор значений 8 integer.В начале все кажется выполненным правильно, но после некоторого выполнения, когда я выполняю его в своем коде C ++ с использованием TADOQuery, время выполнения увеличивается, но не в SSMS, в котором время выполнения все еще корректно.

На первом этапе я пытаюсь усовершенствовать свою хранимую процедуру, чтобы повысить ее производительность.Я заработал некоторое время на выполнение, но проблема все еще присутствует.

Я также пытаюсь проверить свой код на предмет поиска некоторых абсурдных строк, которые могут увеличить время выполнения.Но я использую тот же код с другими хранимыми процедурами, и они не показывают того же эффекта.

Поэтому я использую SQL Profiler, чтобы увидеть, что, черт возьми, происходит.Ниже вы можете увидеть разницу между хорошим и плохим исполнением.


Хорошее исполнение

 CPU | Reads | Writes | Duration 
 93  | 13657 | 0      | 113


Плохое исполнение

 CPU      | Reads    | Writes | Duration
 22090    | 31960629 | 0      | 25158

Как вы можете видеть, значения reads и доступа к процессору растут в геометрической прогрессии.

Если я выполню ту же хранимую процедуру в редакторе запросов SSMS, результаты будут полученыхорошее выполнение.

Я просто хочу, чтобы моя хранимая процедура выполнялась всегда с более или менее одинаковой продолжительностью, независимо от того, где я выполняю запрос.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Проблема была в плане выполнения.

Когда хранимая процедура компилируется, определяется новый план на основе фактических данных.После нескольких выполнений план становится старым, потому что данные часто меняются.

Поэтому для решения этой проблемы я использовал параметры WITH RECOMPILE для хранимой процедуры.Я думаю, что это не лучшее решение, но оно решает проблему, и теперь у меня больше нет времени ожидания запроса.

Таким образом, я пробую некоторые другие решения, чтобы применить перекомпиляцию в лучший момент, но единственное решениеэто работает хорошо с этой опцией.

0 голосов
/ 30 января 2019

видели это несколько раз - это ловит многих из нас.Проверьте настройки по вашему звонку на наличие таких вещей, как включение / выключение ANSI NULL, других настроек и т. Д. Подобные изменения приводят к различным планам выполнения.Подробнее см. SQL в ssms, чем в приложении .

...