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

Откуда:
Сообщений: 74
Здравствуйте.
подскажите пожалуйста новичку
у меня есть хранимая процедура и в ней есть 2 оператора SUM которые долго выполняются, хотелось бы чтобы они выполнялись параллельно, есть ли такая возможность?
18 июл 14, 14:22    [16325179]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
ZHEKA_DON
есть ли такая возможность?

запросы в одном соединении всегда выполняются последовательно
18 июл 14, 14:22    [16325188]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Написать две процедуры, в каждом по одному оператору sum, и запустить их в разных коннектах.
18 июл 14, 14:23    [16325189]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
ZHEKA_DON
Member

Откуда:
Сообщений: 74
Гавриленко Сергей Алексеевич,
а можно поподробней про разные коннекты?
у меня эта процедура вызывается из RDL ...
18 июл 14, 14:34    [16325275]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
ZHEKA_DON
Гавриленко Сергей Алексеевич,
а можно поподробней про разные коннекты?
у меня эта процедура вызывается из RDL ...


Вы не сможете сдать параллельность на уровне текущей сессии SQL. Нужно делать на уровне чего-то стороннего. Например в пакете SSIS вызовете две процедуры в двух разных блоках, тогда они пойдут в параллель.
18 июл 14, 14:37    [16325304]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
ZHEKA_DON
Member

Откуда:
Сообщений: 74
а скажите плиз что такое Max degree of parallelism ?
я думал это как раз и отвечает за параллельное выполнение...
21 июл 14, 07:29    [16332954]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
mag2000
Member

Откуда:
Сообщений: 187
ZHEKA_DON
а скажите плиз что такое Max degree of parallelism ?

Параметр max degree of parallelism:
http://technet.microsoft.com/ru-ru/library/ms181007(v=sql.105).aspx
21 июл 14, 08:53    [16333037]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
ZHEKA_DON
а скажите плиз что такое Max degree of parallelism ?
я думал это как раз и отвечает за параллельное выполнение...
Это параллельное выполнение в одном запросе.
ZHEKA_DON
у меня есть хранимая процедура и в ней есть 2 оператора SUM которые долго выполняются, хотелось бы чтобы они выполнялись параллельно, есть ли такая возможность?
Можно объеденить эти два SUM в один запрос, тогда есть вероятность, что сервер их будет выполнять параллельно.
21 июл 14, 08:56    [16333046]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
NickAlex66
Member

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

Вы бы хоть запрос опубликовали, а то таки "лечение по фоторгафии" получается :-)
21 июл 14, 11:53    [16334224]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
ZHEKA_DON
Member

Откуда:
Сообщений: 74
вот часть хранимки

SET @MoneyForPlanInit = ISNULL(
(

SELECT SUM
(
ASSIGBYDAY.[AssignmentBaseline10BudgetCost]
)
FROM [ProjectWebApp].[dbo].[MSP_EpmProject_UserView] AS PROJ
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmTask_UserView] AS TASK ON PROJ.ProjectUID = TASK.ProjectUID AND (TASK.TaskIsSummary = 1) AND (TASK.TaskIsActive = 1)
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmAssignment] AS ASSIG ON ASSIG.TaskUID = TASK.TaskUID
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmResource] AS RES ON RES.[ResourceUID] = ASSIG.ResourceUID AND REPLACE(RES.ResourceName,'~Деньги отдела ','') = @DEP
INNER JOIN [ProjectWebApp].[dbo].[CRM_EmpAssignmentBaseline10BudgetCost_UserView] AS ASSIGBYDAY ON ASSIGBYDAY.AssignmentUID = ASSIG.AssignmentUID
WHERE
(PROJ.ProjectUID <> @PUID) AND
((PROJ.[Фаза проекта] = 'Планирование') OR (PROJ.[Фаза проекта] = 'Инициация'))
AND (ASSIGBYDAY.TimeByDay <= Cast(YEAR(@startDate) as varchar) + '-' + Cast(datepart(day,dateadd(month,1,dateadd(day,1-day(@startDate),@startDate))-1) as varchar) + '-' + Cast(Month(@startDate) as varchar))
AND (ASSIGBYDAY.TimeByDay >= Cast(YEAR(@startDate) as varchar) + '-01-'+ Cast(Month(@startDate) as varchar))
AND ASSIGBYDAY.[AssignmentBaseline10BudgetCost] is not NULL
),0)

SET @MoneyForExec = ISNULL(
(
SELECT SUM
(
ASSIGBYDAY.[AssignmentBaseline10BudgetCost]
)
FROM [ProjectWebApp].[dbo].[MSP_EpmProject_UserView] AS PROJ
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmTask_UserView] AS TASK ON PROJ.ProjectUID = TASK.ProjectUID AND (TASK.TaskIsSummary = 1) AND (TASK.TaskIsActive = 1)
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmAssignment] AS ASSIG ON ASSIG.TaskUID = TASK.TaskUID
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmResource] AS RES ON RES.[ResourceUID] = ASSIG.ResourceUID AND REPLACE(RES.ResourceName,'~Деньги отдела ','') = @DEP
INNER JOIN [ProjectWebApp].[dbo].[CRM_EmpAssignmentBaseline10BudgetCost_UserView] AS ASSIGBYDAY ON ASSIGBYDAY.AssignmentUID = ASSIG.AssignmentUID
WHERE
(PROJ.ProjectUID <> @PUID) AND
((PROJ.[Фаза проекта] = 'Исполнение'))
AND (ASSIGBYDAY.TimeByDay <= Cast(YEAR(@startDate) as varchar) + '-' + Cast(datepart(day,dateadd(month,1,dateadd(day,1-day(@startDate),@startDate))-1) as varchar) + '-' + Cast(Month(@startDate) as varchar))
AND (ASSIGBYDAY.TimeByDay >= Cast(YEAR(@startDate) as varchar) + '-01-'+ Cast(Month(@startDate) as varchar))
AND ASSIGBYDAY.[AssignmentBaseline10BudgetCost] is not NULL
),0)
21 июл 14, 13:31    [16335070]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
ZHEKA_DON
Member

Откуда:
Сообщений: 74
хранимку я оптимизировал и она стала более менее быстро выполняться.
сейчас возникла другая проблема
из RDL файла у меня вызывается эта хранимка несколько раз с разными параметрами, для каждого графика (их может быть 10 штук)
и время выполнения вырастает в n раз, они выполняются последовательно друг за другом... а хотелось бы чтобы параллельно...
21 июл 14, 13:36    [16335100]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Это все делается одним запросом:
SELECT
 @MoneyForPlanInit = isnull(SUM(case when PROJ.[Фаза проекта] in ('Планирование',  'Инициация') then ASSIGBYDAY.[AssignmentBaseline10BudgetCost] end), 0),
 @MoneyForExec = isnull(SUM(case when PROJ.[Фаза проекта] = 'Исполнение' then ASSIGBYDAY.[AssignmentBaseline10BudgetCost] end), 0)
FROM [ProjectWebApp].[dbo].[MSP_EpmProject_UserView] AS PROJ
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmTask_UserView] AS TASK ON PROJ.ProjectUID = TASK.ProjectUID AND (TASK.TaskIsSummary = 1) AND (TASK.TaskIsActive = 1)
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmAssignment] AS ASSIG ON ASSIG.TaskUID = TASK.TaskUID
INNER JOIN [ProjectWebApp].[dbo].[MSP_EpmResource] AS RES ON RES.[ResourceUID] = ASSIG.ResourceUID AND REPLACE(RES.ResourceName,'~Деньги отдела ','') = @DEP
INNER JOIN [ProjectWebApp].[dbo].[CRM_EmpAssignmentBaseline10BudgetCost_UserView] AS ASSIGBYDAY ON ASSIGBYDAY.AssignmentUID = ASSIG.AssignmentUID
WHERE
(PROJ.ProjectUID <> @PUID) AND
((PROJ.[Фаза проекта] in ('Планирование', 'Инициация', 'Исполнение')
AND (ASSIGBYDAY.TimeByDay <= Cast(YEAR(@startDate) as varchar) + '-' + Cast(datepart(day,dateadd(month,1,dateadd(day,1-day(@startDate),@startDate))-1) as varchar) + '-' + Cast(Month(@startDate) as varchar))
AND (ASSIGBYDAY.TimeByDay >= Cast(YEAR(@startDate) as varchar) + '-01-'+ Cast(Month(@startDate) as varchar))
AND ASSIGBYDAY.[AssignmentBaseline10BudgetCost] is not NULL
21 июл 14, 14:01    [16335357]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
ZHEKA_DON
Member

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

СПАСИБО БОЛЬШОЕ!!! заработало быстрее))
21 июл 14, 14:30    [16335611]     Ответить | Цитировать Сообщить модератору
 Re: паралельное выполнение запросов  [new]
NickAlex66
Member

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

Про индексы и статистику не забудьте под ваш запрос.
21 июл 14, 14:35    [16335672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить