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

Откуда: ближайшее заМКАДье
Сообщений: 4838
Проводил эксперименты с параметром БД parametrization.
Т.к. нет возможности контролировать все запросы, разработчиков несколько. + есть ПО, генерирующее однотипные запросы(Глобально переделать сейчас нет возможности). В связи с этим кэш захламляется похожими планами.

Суть. Сделал базе parametrization = forced. Ожидал, что для большинства однотипных запросов будет создан единый план.

После изменения вижу, что по одному запросу все равно генерятся планы с разными параметрами.
Пример этого запроса:
DECLARE    @IsRentrak VARCHAR(1) = '0'    SELECT @IsRentrak = CASE WHEN [rCinema_ID] IS NOT NULL THEN '1' ELSE '0' END       FROM [dbo].[Spr_245_11_RXML_Cinema]  WHERE xCinema_ID = '401'    SELECT [{laIsFromRentrak.VISIBLE}] = @IsRentrak
DECLARE    @IsRentrak VARCHAR(1) = '0'    SELECT @IsRentrak = CASE WHEN [rCinema_ID] IS NOT NULL THEN '1' ELSE '0' END       FROM [dbo].[Spr_245_11_RXML_Cinema]  WHERE xCinema_ID = '3590'    SELECT [{laIsFromRentrak.VISIBLE}] = @IsRentrak
DECLARE    @IsRentrak VARCHAR(1) = '0'    SELECT @IsRentrak = CASE WHEN [rCinema_ID] IS NOT NULL THEN '1' ELSE '0' END       FROM [dbo].[Spr_245_11_RXML_Cinema]  WHERE xCinema_ID = '374'    SELECT [{laIsFromRentrak.VISIBLE}] = @IsRentrak

И таких больше 1000.

Точечно я могу все обернуть в хранимку, чтоб был один план. Но хочется понять, почему не сработала принудительная параметризация? Может мне надо что-то еще сделать?
---
Проходя мимо разложенных граблей, ты теряешь драгоценный опыт. (с)
19 сен 19, 11:37    [21974024]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Владислав Колосов
Member

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

это план выполнения пакета. Запрос начинается с SELECT и заканчивается WHERE xCinema_ID =...
19 сен 19, 11:53    [21974048]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4838
Владислав Колосов
Megabyte,

это план выполнения пакета. Запрос начинается с SELECT и заканчивается WHERE xCinema_ID =...

Понял. Печаль. Спасибо.
19 сен 19, 12:19    [21974086]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Владислав Колосов
Member

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

ну почему, вы снизили затраты на время компиляции запросов. У нас, например, клиент генерирует запросы, в которых свыше 100 джойнов может быть и включение принудительной параметризации оказалось единственным приемлемым средством сократить время отклика.
19 сен 19, 12:21    [21974089]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6821
Однако, включение принудительного прослушивания имеет рад негативных побочных эффектов. К примеру, сервер перестаёт использовать в плане запроса фильтрованные индексы.
19 сен 19, 12:23    [21974092]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5007
Megabyte
В связи с этим кэш захламляется похожими планами.

если они одноразовые, то поможет опция "optimize for ad-hoc workloads"
правда излишнюю компиляцию не уберет
19 сен 19, 14:06    [21974279]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4838
komrad
Megabyte
В связи с этим кэш захламляется похожими планами.

если они одноразовые, то поможет опция "optimize for ad-hoc workloads"
правда излишнюю компиляцию не уберет

Знаю про эту опцию, но в целом по серверу она не нужна.
19 сен 19, 15:28    [21974377]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5007
Megabyte
komrad
пропущено...

если они одноразовые, то поможет опция "optimize for ad-hoc workloads"
правда излишнюю компиляцию не уберет

Знаю про эту опцию, но в целом по серверу она не нужна.


кстати, не вижу вреда от нее и на серверном уровне
или имеются какие-то специфические нагрузки?
19 сен 19, 17:12    [21974506]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1431
komrad
кстати, не вижу вреда от нее и на серверном уровне
или имеются какие-то специфические нагрузки?
Как уже сказали - разборов запросов меньше не станет. Но в качестве оверхеда нам достается библиотечный кэш, битком забитый "чучелами", вместо планов. А их в кэш поместится сильно больше, чем нормальных планов. Разница может отличаться в разы. И вот теперь серверу придется искать разобранный план для вновь пришедшего запроса не среди, скажем, 20к разобранных планов, а среди 20к планов, и 80к "одноразовых заглушек".
19 сен 19, 20:35    [21974703]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1431
Megabyte
хочется понять, почему не сработала принудительная параметризация?
Она сработала, просто не совсем "ровно".
Почитайте вот эту страничку BOL-а с момента "Рекомендации"
19 сен 19, 20:37    [21974705]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4838
Щукина Анна
Megabyte
хочется понять, почему не сработала принудительная параметризация?
Она сработала, просто не совсем "ровно".
Почитайте вот эту страничку BOL-а с момента "Рекомендации"

Я писал, знаю про эту настройку, но считаю, что в целом для сервера она будет лишней. Однотипные запросы генерятся только в одной из 7 рабочих баз(из них 5 активно используемых), хоть и самой большой и часто используемой.

p.s. У нас есть ПО, которое и генерит однотипные запросы из базы, где в тексте хранятся тексты запросов. Судя по всему, выполняются они просто: exec(@sql). И далеко не все в хранимках.
Сейчас пишется новая версия, уже договорился с разработчиком переделать на параметризированный вызов sp_executesql.
20 сен 19, 23:21    [21975818]     Ответить | Цитировать Сообщить модератору
 Re: Принудительная параметризация базы  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4838
Щукина Анна
Megabyte
хочется понять, почему не сработала принудительная параметризация?
Она сработала, просто не совсем "ровно".
Почитайте вот эту страничку BOL-а с момента "Рекомендации"

Не сразу внимательно прочитал. :) Про причины появления запросов в курсе и даже отуда ноги растут)
20 сен 19, 23:33    [21975821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить