To stare pytanie zasługuje na bardziej wyczerpującą odpowiedź. Niektóre z nich są wymienione w innych odpowiedziach / komentarzach tutaj, inne mogą, ale nie muszą, działać w konkretnej sytuacji OP, ale mogą działać dla innych, którzy szukają wywoływania przechowywanych procedur asynchronicznie z SQL.
Wystarczy być całkowicie jednoznaczne: TSQL czy nie (przez siebie) mają zdolność do uruchomienia innych operacji TSQL asynchronicznie .
To nie znaczy, że wciąż nie masz wielu opcji:
- Zadania agenta SQL : Utwórz wiele zadań SQL i albo zaplanuj ich uruchomienie w żądanym czasie, albo uruchom je asynchronicznie z poziomu „kontroli nadrzędnej” przechowywanej przy użyciu
sp_start_job
. Jeśli chcesz programowo monitorować ich postęp, po prostu upewnij się, że zadania aktualizują niestandardową tabelę JOB_PROGRESS (lub możesz sprawdzić, czy zakończyły się jeszcze przy użyciu funkcji nieudokumentowanej, xp_sqlagent_enum_jobs
jak opisano w tym doskonałym artykule Gregory A. Larsen). Musisz utworzyć tyle osobnych zadań, ile chcesz, aby działały równoległe procesy, nawet jeśli działają na tym samym przechowywanym proc z różnymi parametrami.
- Pakiet SSIS : w przypadku bardziej skomplikowanych scenariuszy asynchronicznych utwórz pakiet SSIS z prostym przepływem zadań rozgałęziających. SSIS uruchomi te zadania w poszczególnych spidach, które SQL będzie wykonywać równolegle. Wywołaj pakiet SSIS z zadania agenta SQL.
- Aplikacja niestandardowa : Napisz prostą aplikację niestandardową w wybranym języku (C #, Powershell itp.), Korzystając z metod asynchronicznych udostępnianych przez ten język. Wywołaj SQL przechowywany proc w każdym wątku aplikacji.
- Automatyzacja OLE : w SQL użyj
sp_oacreate
i sp_oamethod
uruchom nowy proces, wywołując nawzajem przechowywane procedury, jak opisano w tym artykule , również przez Gregory'ego A. Larsena.
- Service Broker : Spójrz na używanie Service Broker , dobry przykład asynchronicznego wykonania w tym artykule .
- Równoległe wykonywanie CLR : użyj poleceń CLR
Parallel_AddSql
i Parallel_Execute
zgodnie z opisem w tym artykule Alana Kaplana (tylko SQL2005 +).
- Zaplanowane zadania Windows : Wymienione dla kompletności, ale nie jestem fanem tej opcji.
Gdybym to był ja, prawdopodobnie użyłbym wielu zadań agenta SQL w prostszych scenariuszach, a pakiet SSIS w bardziej złożonych scenariuszach.
W twoim przypadku wywoływanie zadań SQL Agent brzmi jak prosty i łatwy do zarządzania wybór.
Ostatni komentarz : SQL już teraz próbuje zrównoważyć poszczególne operacje, kiedy tylko jest to możliwe *. Oznacza to, że uruchomienie 2 zadań jednocześnie zamiast po sobie nie gwarantuje, że zakończy się wcześniej. Przetestuj dokładnie, aby zobaczyć, czy rzeczywiście coś poprawia, czy nie.
Mieliśmy programistę, który utworzył pakiet DTS do uruchamiania 8 zadań jednocześnie. Niestety był to tylko serwer 4-procesorowy :)
* Zakładając domyślne ustawienia. Można to zmodyfikować, zmieniając maksymalny stopień równoległości lub maskę koligacji na serwerze, lub stosując wskazówkę dotyczącą zapytania MAXDOP.