Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по тормозам!  [new]
Andrew12
Member

Откуда:
Сообщений: 81
Есть MSSQL 2008 Express и ХП вида:

SET NOCOUNT ON;
DECLARE ktCursor CURSOR FOR 
SELECT     iddoc, date, ktcount
      FROM         dbo.unionPluMoveDates(@datebegin, @dateend)
      WHERE     (dtcount = 0) AND (idfirm = @idFirm) AND (idstore = @idStore) AND (idPlu=@idPlu) AND (idUnits=@idUnit) AND (date>=@datebegin) AND (date<=@dateend)
      ORDER BY DATE, iddoc

OPEN ktCursor
CLOSE ktCursor

DEALLOCATE ktCursor

Данная ХП выполняется много раз
Если при ПЕРВОМ выполнении дать такие параметры, что SELEСT пустой, то скорость выполнения данного вызова и всех последующих (в независимости от переданных параметров) тормозится в 5 раз.
Если при ПЕРВОМ вызове SELECT имеет значения, то этот вызов и дальнейшие имеют нормальную скорость.
Тормоза исчезают, если убрать OPEN ktCursor.

Подскажите, что это может быть!
3 авг 11, 16:37    [11066110]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А зачем этот код нужен-то?
3 авг 11, 16:42    [11066152]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Виснет моя функция, пере-ALTER-ришь её, всё ОК.
3 авг 11, 16:50    [11066239]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
функция в курсоре, адская смесь:) бедный оптимизатор
3 авг 11, 16:54    [11066274]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Самое странное - сразу за OPEN ktCursor следует CLOSE ktCursor
3 авг 11, 17:30    [11066614]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iap
Самое странное - сразу за OPEN ktCursor следует CLOSE ktCursor
Я про то же. Код ничего полезного не делает.
3 авг 11, 17:31    [11066618]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если это инлайн - все нормально. open / close небось сократили при тестировании...
3 авг 11, 18:46    [11067178]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Andrew12
Member

Откуда:
Сообщений: 81
Crimean,

Так и есть - я представил минимальный код, вызывающий данную ошибку.
Вообщем-то все правы, recompile, alter - все єто помогает от болячки. Сейчас ищу оптимальній метод позволяющий не сильно замедлить процедуру.
3 авг 11, 22:15    [11067837]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35376
Блог
http://www.sqlpointers.com/2006/11/parameter-sniffing-stored-procedures.html
4 авг 11, 00:28    [11068189]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по тормозам!  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Критик
http://www.sqlpointers.com/2006/11/parameter-sniffing-stored-procedures.html


а вот про это - забываем
4 авг 11, 11:04    [11069207]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить