Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MS SQL Server > медленная работа SP |
Автор: Vit 10.7.2007, 21:33 |
Имеется длинный SQL код. Один и тот же код работает в квери аналайзере в несколько раз быстрее, чем в SP. С компиляцией вроде не связано - так как повторное выполнение столь же длительное |
Автор: SergKO 11.7.2007, 11:37 | ||
1. Vit, посмотрите какие SET посылаются при установлении коннекта из Q&A и из Вашего приложения. 2. В отдельных случаях рекомпиляция может производиться и при повторных вызовах. Один из вариантов - в процедуре создается временная таблица, а операции с этой таблицей производятся в другой процедуре, вызываемой из первой. В следующем примере при любом вызове процедуры spTst будет рекомпиляция процедуры spSubTst
3. Посмотрите какой конкретно стейтмент "тормозит". 4. Приложение и Q&A запускаются на одном и том-же компьютере? |
Автор: Vit 11.7.2007, 16:31 | ||
1. и хранимка и код вызывал из одного и того же окна QA 2. хранимок не вызывается 3. вот етот, причем при запуске просто в QA выполняется 1 сек, в хранимке - пол часа
4. О приложении речь не идет - все в QA с одного и того же окна |
Автор: SergKO 11.7.2007, 19:20 |
1. Первое, что приходит в голову - используются разные планы. Если не затруднит, то покажите оба в текстовом виде. Я всречал несколько раз сообщения о том, что такие вещи происходили после перехода с 7 на 2000 (у Вас не было такого перехода совсем недавно?). Оптимизаторы разные. 2. Попробуйте реиндекс и обновите статистику. 3. Если объем данных большой, то при выборе неудачного плана скорее всего начинается spool во время INSERTA (посмотрите Profiler'ом). 4. Попробуйте разложить запрос на подзапросы и выполняйте постепенно усложняя. Для начала попробуйте SELECT без INSERTA. PS мелкая придирка DateAdd(yy, -2, @RD) лучше вычислить заранее и подставить вместо p.RunDate >= DateAdd(yy, -2, @RD) переменную. |
Автор: Vit 11.7.2007, 19:47 |
Примерно так и поступил, решило проблему разбиение на несколько запросов |