Irgendwann habe ich diese Frage bei StackOverflow beantwortet , aber es scheint nützlich zu sein, diese Informationen auch bei DBA.SE zu überarbeiten und zu aktualisieren.
Nur um ganz ausdrücklich: TSQL tut nicht (selbst) haben die Fähigkeit , asynchron andere TSQL Operationen zu starten .
Das bedeutet nicht, dass Sie noch nicht viele Optionen haben (einige davon werden in anderen Antworten erwähnt):
- SQL Agent-Jobs : Erstellen Sie mehrere SQL-Jobs und planen Sie sie so, dass sie zum gewünschten Zeitpunkt ausgeführt werden, oder starten Sie sie asynchron von einem "Master Control" -Speicher mit
sp_start_job
. Wenn Sie ihren Fortschritt programmgesteuert überwachen müssen, stellen Sie einfach sicher, dass die Jobs jeweils eine benutzerdefinierte JOB_PROGRESS-Tabelle aktualisieren (oder Sie können überprüfen, ob sie die undokumentierte Funktion, xp_sqlagent_enum_jobs
wie in diesem hervorragenden Artikel von Gregory A. Larsen beschrieben, bereits verwendet haben). Sie müssen so viele separate Jobs erstellen, wie parallele Prozesse ausgeführt werden sollen, auch wenn sie denselben gespeicherten Prozess mit unterschiedlichen Parametern ausführen.
- SSIS-Paket : Erstellen Sie ein SSIS-Paket mit einem einfachen Verzweigungs-Taskflow. SSIS startet diese Aufgaben in einzelnen Spids, die SQL parallel ausführt.
- Benutzerdefinierte Anwendung : Schreiben Sie eine einfache benutzerdefinierte Anwendung in der Sprache Ihrer Wahl (C #, Powershell usw.) mit den von dieser Sprache bereitgestellten asynchronen Methoden. Rufen Sie einen gespeicherten SQL-Prozess für jeden Anwendungsthread auf.
- OLE-Automatisierung : Verwenden
sp_oacreate
und sp_oamethod
starten Sie in SQL einen neuen Prozess, der sich gegenseitig als gespeicherten Prozess aufruft, wie in diesem Artikel beschrieben , ebenfalls von Gregory A. Larsen.
- Service Broker : Sehen Sie sich in diesem Artikel die Verwendung von Service Broker an , ein gutes Beispiel für die asynchrone Ausführung .
- CLR Parallel Execution : Verwenden Sie die CLR-Befehle
Parallel_AddSql
und Parallel_Execute
wie in diesem Artikel von Alan Kaplan beschrieben (nur SQL2005 +).
- Geplante Windows-Aufgaben : Der Vollständigkeit halber aufgeführt, aber ich bin kein Fan dieser Option.
Wenn ich es wäre, würde ich wahrscheinlich mehrere SQL Agent-Jobs in einfacheren Szenarien und ein SSIS-Paket in komplexeren Szenarien verwenden.
In Ihrem Fall klingen mehrere geplante Agent-Jobs wie eine einfache und überschaubare Wahl, es sei denn, Sie versuchen, 200 separate Threads zu starten.
Ein letzter Kommentar : SQL versucht bereits, einzelne Operationen zu parallelisieren, wann immer dies möglich ist *. Dies bedeutet, dass das gleichzeitige Ausführen von zwei Aufgaben statt nacheinander keine Garantie dafür ist, dass sie früher abgeschlossen werden. Testen Sie sorgfältig, ob sich tatsächlich etwas verbessert oder nicht.
Wir hatten einen Entwickler, der ein DTS-Paket erstellt hat, um 8 Aufgaben gleichzeitig auszuführen. Leider war es nur ein 4-CPU-Server :)
* Vorausgesetzt, Standardeinstellungen. Dies kann durch Ändern des maximalen Parallelitätsgrads oder der Affinitätsmaske des Servers oder mithilfe des MAXDOP-Abfragehinweises geändert werden.