Как я могу запустить хранимые процедуры SQL Server параллельно? - PullRequest
8 голосов
/ 10 ноября 2008

Я хочу сделать что-то вроде:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

Я могу сделать это в дтс. Есть ли способ сделать это в транзакции SQL? Или есть способ сделать это с помощью пакетного скрипта (например, VBS или PowerShell)?

Ответы [ 4 ]

5 голосов
/ 10 ноября 2008

Вы можете создать хранимую процедуру CLR, которая (используя C #) будет вызывать первые два в их собственных потоках, а затем блокировать, пока оба не будут завершены ... затем запустить третий.

Вы можете использовать CLR sprocs в вашей ситуации? Если это так, я отредактирую этот ответ, чтобы получить более подробную информацию.

4 голосов
/ 10 марта 2009

sp _ start _ job

В данный момент я делаю аналогичную вещь, и единственный способ избежать использования SSIS или какой-либо внешней оболочки - это разделить мою подпрограмму загрузки на «потоки» вручную, а затем запустить одно основное задание sqlagent который, в свою очередь, выполняет столько задач, сколько у меня есть потоков. С этого момента они все работают автономно.

Это не совсем то, что мы ищем, но результат тот же. Если вы проверите статус задания для подзадач, вы также можете реализовать условный запуск sproc 3.

Какой смысл в 8 ядрах, если мы не можем использовать их все сразу?

1 голос
/ 10 ноября 2008

Вам абсолютно необходимо, чтобы оба SP выполнялись параллельно?

Имея простые операторы CRUD в одном SP, я обнаружил, что SQL S. очень хорошо определяет, какие из них можно запускать параллельно, и делает это. Я никогда не видел, чтобы SQL S. запускал 2 SP параллельно, если оба они вызываются последовательно из оператора T-SQL, даже не знаю, возможно ли это.

Теперь, действительно ли DTS выполняет их параллельно? Может быть, он просто выполняет их последовательно, а затем вызывает 3-й SP после успешного завершения последнего.

Если он действительно запускает их параллельно, возможно, вам стоит придерживаться DTS, но тогда я хотел бы знать, что он делает, если у меня есть вызов пакета DTS, скажем, 10 мощных SP параллельно ... Я должен сделать несколько тестов, чтобы узнать это сам: D

0 голосов
/ 23 января 2009

Вы можете использовать SSIS. Преимущества этого заключаются в том, что пакет может храниться на сервере SQL Server и легко планироваться там.

Из PowerShell или любого другого языка сценариев вы можете использовать командную строку SQL osql или sqlcmd. Эту технику также можно использовать для планирования этого на SQL Server, также используя xp_cmdshell.

...