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

Откуда: Москва
Сообщений: 123
Коллеги, доброго времени суток.

К сожалению, не могу найти как установить MAXDOP или max degree of parallelism только для одной процедуры. MAXDOP работает в контексте запроса, а max degree of parallelism в контексте всего сервера. На всём сервере установлен max degree of parallelism = 1 и его необходимо оставить в таком состоянии. В идеале это вызвать процедуру с повышенным параметром параллелизма только на этот вызов. Например:

exec MyProc 'testData' WITH MAXDOP 5 - это вымышленный запрос и WITH MAXDOP не существует.

В крайнейм случае можно установить MAXDOP на всю процедуру целиком. Спасибо.
5 фев 14, 10:54    [15520889]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
К сожалению, не могу найти как установить MAXDOP или max degree of parallelism только для одной процедуры.

И не найдете.
MAXDOP - это хинт для конкретного запроса
max degree of parallelism - это установка для всех коннектов
5 фев 14, 11:02    [15520930]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Dmitri4
К сожалению, не могу найти как установить MAXDOP или max degree of parallelism только для одной процедуры.
Не, для процедуры нельзя.

А в чём проблема указать MAXDOP для запросов? Или процедуру менять нельзя?
5 фев 14, 11:05    [15520945]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
Dmitri4
К сожалению, не могу найти как установить MAXDOP или max degree of parallelism только для одной процедуры.

И не найдете.
MAXDOP - это хинт для конкретного запроса
max degree of parallelism - это установка для всех коннектов


Именно это я и написал в своём сообщении, чтобы не было таких ответов...

На мой вопрос вы ответили, я всё-таки надеялся что есть какие-то обходные пути. Спасибо.
5 фев 14, 11:13    [15521001]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
alexeyvg
Не, для процедуры нельзя.

А в чём проблема указать MAXDOP для запросов? Или процедуру менять нельзя?


Проблема в создании XML, сервер использует по 1 процессору на каждое задание, а этого очень мало. Как вариант запустить 20 таких заданий, но скорость создания конкретного XML файла крайней важна. Так что проблема не в SELECT, а в использовании множества процессоров для формирования XML. Может есть другое решение?
5 фев 14, 11:16    [15521029]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
На мой вопрос вы ответили, я всё-таки надеялся что есть какие-то обходные пути

Написать процедуру нормально не пробовали ?
5 фев 14, 11:16    [15521030]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
Проблема в создании XML, сервер использует по 1 процессору на каждое задание, а этого очень мало.

Что вы называете "заданием" ?
5 фев 14, 11:17    [15521038]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
Dmitri4
На мой вопрос вы ответили, я всё-таки надеялся что есть какие-то обходные пути

Написать процедуру нормально не пробовали ?


Прочитайте мой ответ alexeyvg. На сколько я понимаю проблем с процедурой нет и выборкой данных то же.
5 фев 14, 11:17    [15521039]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
Dmitri4
Проблема в создании XML, сервер использует по 1 процессору на каждое задание, а этого очень мало.

Что вы называете "заданием" ?


Job, запускаемый через Sql Server Agent, который в свою очередь вызывает процедуру формирования XML.
5 фев 14, 11:18    [15521048]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
который в свою очередь вызывает процедуру формирования XML.

И вы точно знаете, что ваш запрос с XML может использовать больше одного процессора ?
Что мешает в этом запросе использовать MAXDOP ?
5 фев 14, 11:21    [15521076]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
И вы точно знаете, что ваш запрос с XML может использовать больше одного процессора ?
Что мешает в этом запросе использовать MAXDOP ?


Не совсем понимаю о каком запросе идёт речь?

Если о вызове процедуры, то там некуда вставлять MAXDOP, это мы уже обсудили, а если внутри формирования XML, то я не имею возможности это сделать (стоило написать это в самом начале).
5 фев 14, 11:29    [15521145]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
Не совсем понимаю о каком запросе идёт речь?

О том, который формирует XML.
Откуда вы знаете, что этот запрос вообще может быть распараллелен ?
5 фев 14, 11:31    [15521162]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
Откуда вы знаете, что этот запрос вообще может быть распараллелен ?


Когда я тестировал и устанавливал max degree of parallelism в значение, отличное от 1, то обнаружил такую возможность. Не совсем понимаю почему вы называете это "запросом", там множественная логика, где запросы имеют малую часть. Общая длина процедуры более 600 строчек кода.
5 фев 14, 11:36    [15521211]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
Когда я тестировал и устанавливал max degree of parallelism в значение, отличное от 1, то обнаружил такую возможность.

Какую "такую возможность" ? Этот хинт/установка не может _заставить_ сервер распараллеливать запрос.
Где вы увидели результат своего "я тестировал" ?

Dmitri4
Не совсем понимаю почему вы называете это "запросом", там множественная логика, где запросы имеют малую часть.

Т.е. вы думате, что для команды вида set @i=@i+1 можно выполнять параллельно на нескольких процессорах ?
Dmitri4
ам множественная логика, где запросы имеют малую часть. Общая длина процедуры более 600 строчек кода.

Ну и с чего вы тогда решили, что эти все 600 строчек множественной логики можно выполнять параллельно ?
5 фев 14, 11:41    [15521241]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory,

Спасибо за ваш первый ответ. Я получил все необходимые знания. Не вижу смысла вести дальнейший офф топ.
5 фев 14, 11:44    [15521274]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
Я получил все необходимые знания.

Смешно.
MAXDOP или max degree of parallelism позволяют(!не заставляют) серверу построить план выполнения _единичного_ запроса, в котором разные части плана будут выполняться параллельно. План такой оптимазатор построит, только если решит, что он выгоднее.
Последовательные команды в пакете/процедуре все равно будут выполняться последовательно.

Сообщение было отредактировано: 5 фев 14, 11:55
5 фев 14, 11:54    [15521360]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
Смешно.
MAXDOP или max degree of parallelism позволяют(!не заставляют) серверу построить план выполнения _единичного_ запроса, в котором разные части плана будут выполняться параллельно. План такой оптимазатор построит, только если решит, что он выгоднее.
Последовательные команды в пакете/процедуре все равно будут выполняться последовательно.


Рад, что смог поднять вам настроение)

P.S. Первый мой вопрос - "Можно ли для процедуры как-то задать параметр MAXDOP". На него я получил ответ и "все знания", связанные с этим вопросом, я получил. Всё остальное обсуждение, в данный, конкретный момент времени, не имеет для меня силы.
5 фев 14, 12:00    [15521411]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
всё остальное обсуждение, в данный, конкретный момент времени, не имеет для меня силы.

Оптимизацию начинают с поиска узкого/проблемного места.
Оптимизировать 600 строк кода одной "кнопкой" не получится.
5 фев 14, 12:03    [15521443]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
всё остальное обсуждение, в данный, конкретный момент времени, не имеет для меня силы.
Оптимизацию начинают с поиска узкого/проблемного места.
Оптимизировать 600 строк кода одной "кнопкой" не получится.


Полностью с вами согласен, но, как я уже написал, у меня нет возможности редактировать этот механизм и я ищу другие варианты решения задачи.
5 фев 14, 12:06    [15521467]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitri4
у меня нет возможности редактировать этот механизм и я ищу другие варианты решения задачи.

Вы нашли проблемное место то ? где-то в этих 600 строках кода - это не тот уровень приближения
5 фев 14, 12:08    [15521493]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Glory
у меня нет возможности редактировать этот механизм и я ищу другие варианты решения задачи.
Вы нашли проблемное место то ? где-то в этих 600 строках кода - это не тот уровень приближения

Решил именно это сейчас и сделать в тестовой среде. Теперь уже самому стало интересно, где именно кроется проблема.
5 фев 14, 12:29    [15521725]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP для процедуры  [new]
Dmitri4
Member

Откуда: Москва
Сообщений: 123
Я нашёл способ решения проблемы.

С помощью следующего запроса определил нужный порог для threshold for parallelism (смотрим на StatementSubTreeCost), который и применил, затем выставил параметр max degree of parallelism на весь сервер в нужное мне состояние:


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 

WITH XMLNAMESPACES   
   (DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')  
SELECT  
		query_plan AS CompleteQueryPlan, 
		n.value('(@StatementText)[1]', 'VARCHAR(4000)') AS StatementText, 
		n.value('(@StatementOptmLevel)[1]', 'VARCHAR(25)') AS StatementOptimizationLevel, 
		n.value('(@StatementSubTreeCost)[1]', 'VARCHAR(128)') AS StatementSubTreeCost, 
		n.query('.') AS ParallelSubTreeXML,  
		ecp.usecounts, 
		ecp.size_in_bytes 
FROM sys.dm_exec_cached_plans AS ecp 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS eqp 
CROSS APPLY query_plan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple') AS qn(n) 
WHERE  n.query('.').exist('//RelOp[@PhysicalOp="Parallelism"]') = 1


Теперь интересующие меня задачи выполняются в параллельном режиме.

P.S. Это не совсем то решение, которого я хотел добиться изначально, потому что все запросы, выше установленного порога, будут выполнятся в параллельном режиме, но мне подошло данное решение.
25 апр 14, 12:12    [15934600]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить