powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кривая обработка оптимизатором переменной в where
8 сообщений из 8, страница 1 из 1
Кривая обработка оптимизатором переменной в where
    #39995688
unno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Есть проблемный Delete запрос, выполнение которого занимает пару минут, при том, что записей под удаление он не находит
Опытным путем было установлено, что проблема в использование в условии функции с переменной

при замене куска

Код: sql
1.
с j.EventDateTime < DATEADD(day, -@i32, GETDATE())


на
Код: sql
1.
j.EventDateTime < DATEADD(day, -365, GETDATE())


или добавлении опции
Код: sql
1.
OPTION ( OPTIMIZE FOR (@i32 = 365) )




Запрос отрабатывает мгновенно, так же как и при сборки строки запроса со значениями переменных и выполнении через exec

Подскажите, как это обойти без использования констант, оптимизации под фиксированное значение или использования d-sql ?

Спасибо
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39995696
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unno,

OPTION (recompile)
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39995700
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс статистики должны быть актуальными.
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39995724
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Плюс статистики должны быть актуальными.


ну если
OPTION ( OPTIMIZE FOR (@i32 = 365) ) работает, то и рекомпайл должен
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39995759
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unno, собственно,
Код: sql
1.
OPTION ( OPTIMIZE FOR (@i32 = 365) )


И есть оптимальное решение.
Ну, или вместо 365 - другое, наиболее часто используемое значение.
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39995834
unno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
статистика актуальная
OPTION (recompile) помог, спасибо
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39996077
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unno, в результате у вас на каждый вызов будет проводится компиляция и кэш планов запросов будет заполняться чучелами планов, занимая память и ресурсы процессора.
Для низкой интенсивности запросов к базе - это, возможно, и приемлемо, но это не очень хорошее решение.
Вариант с зажатием переменной
OPTION ( OPTIMIZE FOR (@i32 = 365) ) - на мой взгляд, лучше.
План будет один, раз и навсегда стабильный (при неизменной структуре БД).
Начнет внезапно деградировать - уже можно будет осмысливать это.

Для вашего, конечно, случая, может всё просто и не требует излишне усложненного понимания ситуации, но вообще то - это антипаттерн.
...
Рейтинг: 0 / 0
Кривая обработка оптимизатором переменной в where
    #39996088
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
кэш планов запросов будет заполняться чучелами планов
Планы запросов с OPTION (recompile) не кешируются, ибо бессмысленно - план никогда не ищется в кеше.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кривая обработка оптимизатором переменной в where
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]