У меня есть хранимая процедура (sproc) под названием resetflags.Он принимает параметр типа int.Другой sproc editInspection вызывает его.Sproc editInspection выглядит следующим образом:
- обновить одну строку в таблице (продолжительность <0,00 с) </li>
- выполнить другой цикл (продолжительность <0,00 с) </li>
- выполнитьsproc resetFlags (длительность ~ 16 сек. !!!)
- выбрать одну строку (длительность <0,00 сек) </li>
Если я закомментирую строку 3 и запущу sproc, она завершится в течение 0 сек.,Если я запускаю строку 3 отдельно, она заканчивается через 1 сек.Если я закомментирую строки 1 и 2, sproc займет 16 секунд.
В базе данных нет триггера (я счастливый человек без триггера).Там нигде нет назначенных пользователем транзакций.Я использую редакцию SQL 2008 Dev.
Я только что рассчитал время и некоторые другие тестовые сценарии с использованием профилировщика.Вот мои выводы:
Случай 1: Запустил скрипт для запуска sproc editInspection с параметрами.Потребовалось 16000 мс.
Случай 2: Создан тестовый скрипт.Изменено на код для sproc editInspection, так что все параметры являются локальными переменными.Присвоили значения этим локальным переменным, а затем выполнили код.Взял около 16000 мс.
Случай 3: Закомментировал 'exec resetflags' из sproc editInspection и затем выполнил что-то вроде следующего:
execute editInspection param1, ... param n execute resetflags param1
Таким образом, sproc resetflag теперь работает вне проверки sproc editInspection.Это заняло 600-700 мсек.
Случай 4: Взял тестовый сценарий из случая 2. Закомментировал все, кроме одного объявления и назначения переменной.Комментируется все остальные операторы, кроме выполнения resetFlags.Таким образом, сценарий в основном
объявить param1 int / * закомментировано объявить stmts / SET param1 = некоторое значение / закомментировать SET stmts закомментировать SELECTs, UPDATE и EXECUTE * / execute resetFlags param1
Это заняло ~ 16000 мс.
Случай 5: скопировал код из случая 4 и вставил его в новое окно запроса.Выполнено, и это заняло около 700 мс!Это странная часть.
Случай 6: Выполнено sproc resetFlags со значением для параметра.Потребовалось около 600 мс.
Любая подсказка о том, что искать, будет высоко ценится.Я знаю, что я не опубликовал определения кода / таблицы и пример данных.Определения и код довольно большие, и я тоже ленивый.