Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Megabyte Member Откуда: ближайшее заМКАДье Сообщений: 4975 |
Проводил эксперименты с параметром БД 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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
Megabyte, это план выполнения пакета. Запрос начинается с SELECT и заканчивается WHERE xCinema_ID =... |
19 сен 19, 11:53 [21974048] Ответить | Цитировать Сообщить модератору |
Megabyte Member Откуда: ближайшее заМКАДье Сообщений: 4975 |
Понял. Печаль. Спасибо. |
||
19 сен 19, 12:19 [21974086] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
Megabyte, ну почему, вы снизили затраты на время компиляции запросов. У нас, например, клиент генерирует запросы, в которых свыше 100 джойнов может быть и включение принудительной параметризации оказалось единственным приемлемым средством сократить время отклика. |
19 сен 19, 12:21 [21974089] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
Однако, включение принудительного прослушивания имеет рад негативных побочных эффектов. К примеру, сервер перестаёт использовать в плане запроса фильтрованные индексы. |
19 сен 19, 12:23 [21974092] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
если они одноразовые, то поможет опция "optimize for ad-hoc workloads" правда излишнюю компиляцию не уберет |
||
19 сен 19, 14:06 [21974279] Ответить | Цитировать Сообщить модератору |
Megabyte Member Откуда: ближайшее заМКАДье Сообщений: 4975 |
Знаю про эту опцию, но в целом по серверу она не нужна. |
||||
19 сен 19, 15:28 [21974377] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
кстати, не вижу вреда от нее и на серверном уровне или имеются какие-то специфические нагрузки? |
||||
19 сен 19, 17:12 [21974506] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
|
||
19 сен 19, 20:35 [21974703] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
Почитайте вот эту страничку BOL-а с момента "Рекомендации" |
||
19 сен 19, 20:37 [21974705] Ответить | Цитировать Сообщить модератору |
Megabyte Member Откуда: ближайшее заМКАДье Сообщений: 4975 |
Я писал, знаю про эту настройку, но считаю, что в целом для сервера она будет лишней. Однотипные запросы генерятся только в одной из 7 рабочих баз(из них 5 активно используемых), хоть и самой большой и часто используемой. p.s. У нас есть ПО, которое и генерит однотипные запросы из базы, где в тексте хранятся тексты запросов. Судя по всему, выполняются они просто: exec(@sql). И далеко не все в хранимках. Сейчас пишется новая версия, уже договорился с разработчиком переделать на параметризированный вызов sp_executesql. |
||||
20 сен 19, 23:21 [21975818] Ответить | Цитировать Сообщить модератору |
Megabyte Member Откуда: ближайшее заМКАДье Сообщений: 4975 |
Не сразу внимательно прочитал. :) Про причины появления запросов в курсе и даже отуда ноги растут) |
||||
20 сен 19, 23:33 [21975821] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |