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

Откуда: Новосибирск
Сообщений: 290
Всем привет!

Дано: Движок приложения строит запросы согласно некоторому алгоритму,
который включает конструкции типа
"where some_field in (const1, const2, const3, ..., constN)"
Есть подозрение что при изменении состава/количества констант
оптимизатор будет перекомпилировать план исполнения, что плохо скажется на производительности.

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

Сейчас тестирую свои предположения на простом примере:
select * from dbo.some_table where pk in (const1, const2, const3, ..., constN)

Меняю значения/состав констант - бэз разницы. Все пролетает со свистом.

Смотрю кэш:
dbcc freeproccache
select * from dbo.some_table where pk in (const1, const2, const3, ..., constN)
select sql, * from master..syscacheobjects

записи не добавляются

Подскажите механизм (или ссылку где об этом прочитать), согласно которому сервер решает перекомпилировать план исполнения или нет.
Как он выбирает из кэша план исполнения по типу запросу?
Тупым сравнением строк запросов? Где-нибудь это описано?


Все это нужно, чтобы решить - оставить ли существующий механизм генерации запросов или переделать его под использование временной таблицы.
2 фев 06, 14:43    [2313852]     Ответить | Цитировать Сообщить модератору
 Re: как MSSQL использует процедурный кэш?  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
ну чиво, нихто низнает штоли?

Glory, Creamen есть инфа?
3 фев 06, 06:48    [2316049]     Ответить | Цитировать Сообщить модератору
 Re: как MSSQL использует процедурный кэш?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/Publications.shtml#152
3 фев 06, 06:55    [2316055]     Ответить | Цитировать Сообщить модератору
 Re: как MSSQL использует процедурный кэш?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
How to identify the cause of recompilation in an SP:Recompile event
Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005
Query Recompilation in SQL Server 2000
Execution Plan Caching and Reuse
3 фев 06, 11:17    [2317148]     Ответить | Цитировать Сообщить модератору
 Re: как MSSQL использует процедурный кэш?  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
спасибо
3 фев 06, 12:54    [2317890]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить