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

У меня есть задание агента 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 ответ

Решение

В вашем коде:

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.

Другие вопросы по тегам