2008-11-10 29 views
8

Ich möchte wie etwas tun:Wie kann ich gespeicherte SQL Server-Prozeduren parallel ausführen?

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

ich dies in dts tun können. Gibt es eine Möglichkeit, es in transact sql zu tun? Oder gibt es eine Möglichkeit, dies mit einem Batch-Skript (zB VBS oder Powershell) zu tun?

+0

Es könnte einfacher sein, die Frage zu beantworten, wenn Sie erklären würden, warum, außer es ist eine interessante Frage. Dann könnten wir den Zweck und nicht die Technik ansprechen. – dkretz

+0

Das Laden von Daten in ein SQL-Server-Datawarehouse erfordert die Ausführung vieler SQL-Anweisungen. Die Möglichkeit, Anweisungen parallel auszuführen, würde diesen Prozess beschleunigen. Sie können dies mit DTS tun, was ein Werkzeug ist. Ich bin einer dieser Leute, die es vorziehen, Code wo möglich zu verwenden. – cindi

Antwort

4

sp _ _ starten Job

Ich bin zur Zeit eine ähnliche Sache zu tun, und der einzige Weg, die ich gefunden habe mit SSIS oder eine äußere Schale zu vermeiden, ist meine Laderoutine in ‚Threads‘ spalten manuell, und feuern Sie dann einen einzelnen master sqlagent job, der wiederum so viele sp _ start _ jobs ausführt, wie ich Threads habe. Von diesem Punkt an laufen sie alle autonom.

Es ist nicht genau das, was wir suchen, aber das Ergebnis ist das gleiche. Wenn Sie den Jobstatus für die Unterjobs testen, können Sie auch den bedingten Start von sproc 3 implementieren.

Was ist der Punkt in 8 Kernen, wenn wir sie nicht alle auf einmal verwenden können?

+0

Das ist großartig! Wenn jeder Thread fertig ist, kann ich jeden der anderen Jobs überprüfen, damit der letzte Thread den nächsten Job auslöst. – cindi

5

Sie könnten eine CLR Stored Procedure erstellen, die (unter Verwendung von C#) die ersten beiden auf ihren eigenen Threads aufruft und dann blockiert, bis beide vollständig sind ... und dann die dritte ausführen.

Können Sie CLR-Sprocs in Ihrer Situation verwenden? Wenn ja, werde ich diese Antwort bearbeiten, um mehr Details zu haben.

+0

danke Timothy, aber ich denke, ich bin nur ein Glück für eine High-Level-Lösung: ein paar Zeilen transact sql oder Batch-Skript-Code. Ich frage mich nur, gibt es eine einfache Alternative zu dts - Cindi – cindi

+0

Thread.Join wird durch das Host-Schutz-Attribut blockiert. Diese Lösung kann zum Funktionieren gebracht werden, ist aber nicht zuverlässig. Beachten Sie auch, dass SQL Server Ihre Threads immer dann liefern kann, wenn Ihnen danach ist. –

1

Müssen unbedingt beide SPs parallel ausgeführt werden?

Mit einfachen CRUD-Anweisungen innerhalb eines einzelnen SP habe ich festgestellt, dass SQL S. sehr gut ermittelt, welche von ihnen parallel ausgeführt werden können und dies tun. Ich habe noch nie gesehen, dass SQL S. 2 SPs parallel laufen lässt, wenn beide nacheinander von einer T-SQL-Anweisung aufgerufen werden, nicht einmal wissen, ob es überhaupt möglich ist.

Nun, dann führt die DTS sie wirklich parallel? Es könnte sein, dass es sie einfach nacheinander ausführt und dann den 3. SP aufruft, nachdem der letzte erfolgreich abgeschlossen wurde.

Wenn es wirklich parallel läuft, sollten Sie wahrscheinlich mit DTS bleiben, aber dann würde ich gerne wissen, was es tut, wenn ich ein DTS-Paket aufrufen, sagen wir, 10 Heavy Duty SPs parallel ... I muss vielleicht einige Tests machen, um das selbst zu lernen: D

+0

Das Teilen einer einzelnen Anweisung in parallele Threads ist ein anderes Thema. DTS kann separate Anweisungen parallel ausführen und gibt Ihnen viel Kontrolle darüber, wie dies geschieht. Manchmal ist jedoch Code zu einem Werkzeug vorzuziehen, was der Grund für die Frage ist. – cindi

0

Sie können SSIS verwenden. Dies hat den Vorteil, dass das Paket im SQL Server gespeichert und dort problemlos eingeplant werden kann.

Von PowerShell oder fast jeder externen Skriptsprache können Sie die SQL-Befehlszeile osql oder sqlcmd verwenden. Diese Technik kann auch verwendet werden, um sie auf dem SQL Server zu planen, indem sie auch mit xp_cmdshell ausgeblendet wird.

+0

SSIS = DTS, die Frage war, wie zu vermeiden DTS Offensichtlich können Sie SQL aus einer Skriptsprache ausführen, die Frage war, wie SQL-Statements parallel ausgeführt werden. – cindi

Verwandte Themen