Несколько вызовов хранимых процедур в командном окне агента SQL Server выполняются параллельно или последовательно? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть задание агента SQL Server, которое выполняет серию хранимых процедур.Это одношаговое задание, и в командном окне пакета оно говорит следующее:

exec fb_GetDateSource '6A0DA1EB-D349-4D97-AAFC-822343D8EB49'

exec fb_DeliverFile '2344EC77-0D34-44A9-8A10-E5FEA1F6F218'
exec fb_DeliverFile '0BF456B8-24E5-4B0E-8FDA-F31C2D397B3A'
exec fb_DeliverFile 'C42EA4AA-3179-4344-BE24-5CEBA435F4FD'

Итак, первая строка собирает кучу данных во временную таблицу, а затем следующие 3 будут использовать эти данныедоставлять файлы данных нашим клиентам.У нас возникают некоторые проблемы со старыми данными, попадающими в файлы.

Когда я выполняю такую ​​команду, все ли хранимые процедуры вызываются последовательно (как я предполагал) или они могут выполняться параллельно?

Я перевожу первый звонок на отдельный шаг.Таким образом, он запустит его на первом этапе, а затем доставит на втором этапе.В конечном итоге тестирование покажет мне, работает ли оно, но мне интересно, могут ли эти хранимые процедуры работать параллельно друг с другом?Это объяснило бы нашу проблему, если бы это было так.

1 Ответ

0 голосов
/ 27 апреля 2018

В вашем коде:

exec fb_GetDateSource '6A0DA1EB-D349-4D97-AAFC-822343D8EB49';

exec fb_DeliverFile '2344EC77-0D34-44A9-8A10-E5FEA1F6F218';
exec fb_DeliverFile '0BF456B8-24E5-4B0E-8FDA-F31C2D397B3A';
exec fb_DeliverFile 'C42EA4AA-3179-4344-BE24-5CEBA435F4FD';

Хранимые процедуры выполняются последовательно (одна за другой).Если вам нужен параллелизм, вы можете добиться этого, создав несколько заданий и запустив их из основного задания.

Основное задание: sp_start_job запустит задание и вернет управление основной программе.

EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 1
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 2
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 3
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 4

Кроме того, вы можете создать пакет служб SSIS с Parallel Task и запустить этот пакет агентом SQL Server.

...