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

StackOverflow https://stackoverflow.com/questions/277900

Вопрос

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

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

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

Это было полезно?

Решение

sp _ start _ job

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top