Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что такое 'Специальные запросы'?  [new]
BM13
Guest
Добрый день.
В Server Management Studio в отчетах сервера -> панель сервера есть диаграммы где среди прочих имен баз данных присутствует большой кусок диаграммы с названием Специальные запросы. Вот что это за запросы такие. В справке чтото не нашол.
6 фев 14, 09:59    [15526625]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
BM13
В Server Management Studio в отчетах сервера -> панель сервера есть диаграммы где среди прочих имен баз данных присутствует большой кусок диаграммы с названием Специальные запросы. Вот что это за запросы такие. В справке чтото не нашол.
Это так называются Ad Hoc Queries - "нерегламентированные пакеты", "нерегламентированные запросы"

Из нельзя отнести к какой то БД, поэтому они вынесены отдельно.

Собственно, остальное распределение на диаграмме тоже достаточно условно (хотя обычно достаточно точно показывает распределение нагрузки), потому что выполняемые запросы относятся к серверу, а не к конкретной базе данных.
6 фев 14, 10:33    [15526833]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
BM13
Guest
Спасибо. Свё ясно.
Как я понял надо использовать forced parametrization или optimize for ad hoc workloads это как то может уменьшить нагрузку? Или может быть чемто чревато.
6 фев 14, 10:49    [15526933]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
BM13
Как я понял надо использовать forced parametrization или optimize for ad hoc workloads это как то может уменьшить нагрузку? Или может быть чемто чревато.
Если бы это помогало во всех случаях, то такого параметра бы не было :-)

Первый параметр позволяет выделить параметры запросов, и хранить один план для одинаковых запросов с разными параметрами. Второй - вообще хранит не полный план, а предкомпилированный, уменьшая потребности в памяти для планов.

Это может как увеличить произвовдительность, так и уменьшить, нужно тестировать.
Если вы попробуете, это в любом случае данных в базах не сломает, так что нестрашно. Главное, нужно после переключения следить за нагрузкой и мерять последствия.
6 фев 14, 10:57    [15526974]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
BM13
Guest
alexeyvg
BM13
Как я понял надо использовать forced parametrization или optimize for ad hoc workloads это как то может уменьшить нагрузку? Или может быть чемто чревато.
Если бы это помогало во всех случаях, то такого параметра бы не было :-)

Первый параметр позволяет выделить параметры запросов, и хранить один план для одинаковых запросов с разными параметрами. Второй - вообще хранит не полный план, а предкомпилированный, уменьшая потребности в памяти для планов.

Это может как увеличить произвовдительность, так и уменьшить, нужно тестировать.
Если вы попробуете, это в любом случае данных в базах не сломает, так что нестрашно. Главное, нужно после переключения следить за нагрузкой и мерять последствия.

буду пробовать.
большое Спасибо!
6 фев 14, 11:07    [15527037]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Что такое 'Специальные запросы'?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
alexeyvg, тут как -то не совсем так написано?


автор
Even though these two queries are essentially identical, they might each have a separate plan in the cache, just because the literal value is different in each case. Actually these two queries are so simple (with no joins) that SQL Server would probably parameterize them, even using just the default simple parameterization (as opposed to forced parameterization). However, in more complex cases, plan reuse would probably not be possible. While we can do our best to make sure queries are written in a way that enables plan reuse, users and utilities often execute batches that will simply have little reuse.
For SQL Server 2008, if you determine that you have a mostly ad hoc workload with minimal reuse, check out the "optimize for ad hoc workloads" system option. This setting changes SQL Server behavior and does not store a plan on first usage, only the query text. If it matches a second time, the plan is stored. Note that "ad hoc," in this sense, does vary from some people's understanding of the term. Here, it simply refers to the use of random queries that don't promote reuse.
1 июл 15, 02:17    [17835564]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
Mike_za
alexeyvg, тут как -то не совсем так написано?
А в чём отличие?
1 июл 15, 11:52    [17836834]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
o-o
Guest
alexeyvg
Mike_za
alexeyvg, тут как -то не совсем так написано?
А в чём отличие?

Mike_za
This setting changes SQL Server behavior and does not store a plan on first usage, only the query text. If it matches a second time, the plan is stored.

alexeyvg
Второй - вообще хранит не полный план, а предкомпилированный, уменьшая потребности в памяти для планов.

формально можно придраться, что в ИХ тексте пишут, что только *текст* хранится в первый раз,
а вы пишете, что "неполный план".
ну и да, забываете уточнить, что при повторном выполнении того же самого, план уже будет сохранен.

предлагаю улучшенную формулировку:

The optimize for ad hoc workloads option is used to improve the efficiency of the plan cache for workloads that contain many single use ad hoc batches.
When this option is set to 1, the Database Engine stores a small compiled plan stub
in the plan cache when a batch is compiled for the first time, instead of the full compiled plan.
This helps to relieve memory pressure by not allowing the plan cache to become filled with compiled plans that are not reused.
The compiled plan stub allows the Database Engine to recognize that this ad hoc batch has been compiled before
but has only stored a compiled plan stub, so when this batch is invoked (compiled or executed) again, the Database Engine compiles the batch,
removes the compiled plan stub from the plan cache, and adds the full compiled plan to the plan cache.
optimize for ad hoc workloads Server Configuration Option
1 июл 15, 12:43    [17837220]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
После первого раза, вообще ничего кроме текста не сохраняется. Втрой раз текст парсится по новой, оптимизируется, и уже сохраняется план в кеш. Или я не допонял?
1 июл 15, 23:37    [17840629]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
o-o
предлагаю улучшенную формулировку:

The optimize for ad hoc workloads option is used to improve the efficiency of the plan cache for workloads that contain many single use ad hoc batches.
When this option is set to 1, the Database Engine stores a small compiled plan stub

Mike_za
После первого раза, вообще ничего кроме текста не сохраняется. Втрой раз текст парсится по новой, оптимизируется, и уже сохраняется план в кеш. Или я не допонял?

Про заглушку не знал, я думал, там плана вообще нет...

Я как раз про хранение SQL, я имел в виду, что хранится не обычный текст запроса, а некий результат синтаксического анализа, типа семантического дерева запроса ("У каждой заглушки есть уникальный дескриптор SQL"), что то я такое помнил. Может и не так, может, просто текст хранится.
2 июл 15, 02:15    [17841021]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
А во у меня есть большушие склейки с кучей инструкций скл. Я знаю, что они второй раз точно такие же не придут. Можно как-то сказать серверу, что бы он их не клал в кеш планов,
Без взведения глобальных опций?
2 июл 15, 10:25    [17841759]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Mike_za
А во у меня есть большушие склейки с кучей инструкций скл. Я знаю, что они второй раз точно такие же не придут. Можно как-то сказать серверу, что бы он их не клал в кеш планов,
Без взведения глобальных опций?

option (recompile) ?
2 июл 15, 10:34    [17841799]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Shakill,
select *** from *** option(recompile)
select *** from ***
select *** from *** option(recompile)
select *** from ***


в склейке несколько отдельных запросов. Даже если у них указывать у каждого эту опцию, то целиком весь пакет все равно кладется в кеш
2 июл 15, 13:27    [17843117]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_za
Даже если у них указывать у каждого эту опцию, то целиком весь пакет все равно кладется в кеш


An ad-hoc execution plan is inserted and is not referenced again before memory pressure exists. Since ad-hoc plans are initialized with a current cost of zero, when the database engine examines the execution plan, it will see the zero current cost and remove the plan from the procedure cache. The ad-hoc execution plan remains in the procedure cache with a zero current cost when memory pressure does not exist.
2 июл 15, 13:39    [17843224]     Ответить | Цитировать Сообщить модератору
 Re: Что такое 'Специальные запросы'?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
alexeyvg, нашел, кажись

автор
the compiled plan stub
The stub that SQL Server caches when Optimize for Ad Hoc Workloads is enabled is only about 300 bytes in size and doesn’t contain any part of a query execution plan. It’s mainly just a placeholder to keep track of whether a particular query was compiled previously. The stub contains the full cache key and a pointer to the actual query text, which is stored in the SQL Manager cache. Later, the section “Plan cache internals” discusses cache keys and the SQL Manager. The usecounts value in the cache metadata is always 1 for compiled plan stubs because they are never reused.
When a query or batch that generated a compiled plan stub is recompiled, the stub is replaced with the full compiled plan. Initially, the usecounts value is set to 1 because the previous query isn’t guaranteed to have exactly the same execution plan. All that’s known is that the query itself is the same. I will execute some of the same queries used in the previous section after enabling the Op- timize for Ad Hoc Workloads option, so you can see what the usecounts query displays. I need to modify my usecounts query slightly, and rather than look for rows that have a cacheobjtype value of Compiled Plan
12 июл 15, 01:35    [17881673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить