Wie kann ich gespeicherte SQL Server-Prozeduren parallel ausführen?

8

Ich möchte etwas wie:

machen %Vor%

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

    
cindi 10.11.2008, 13:53
quelle

4 Antworten

4

sp _ start _ job

Ich mache im Moment eine ähnliche Sache, und die einzige Möglichkeit, SSIS oder eine externe Shell zu verwenden, besteht darin, meine Load-Routine manuell in "Threads" aufzuteilen und dann einen einzelnen master sqlagent-Job auszulösen der wiederum so viele sp _ start _ jobs ausführt wie ich Threads habe. Ab diesem Zeitpunkt laufen sie alle autonom.

Es ist nicht genau das, wonach 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?

    
Grokling 10.03.2009, 01:28
quelle
5

Sie könnten eine CLR Stored Procedure erstellen, die (mit 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.

    
Timothy Khouri 10.11.2008 14:20
quelle
1

Brauchen Sie unbedingt, dass 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 sequentiell von einer T-SQL-Anweisung aufgerufen werden und nicht einmal wissen, ob es überhaupt möglich ist.

Nun, führt die DTS sie wirklich parallel aus? Es könnte sein, dass es sie einfach nacheinander ausführt und dann den 3. SP nach dem letzten erfolgreich aufruft.

Wenn es wirklich parallel läuft, solltest du wahrscheinlich bei DTS bleiben, aber dann würde ich gerne wissen, was es macht, wenn ich einen DTS-Paketanruf habe, sagen wir, 10 schwere SPs parallel ... ich kann müssen einige Tests machen, um das selbst zu lernen: D

    
Joe Pineda 10.11.2008 17:20
quelle
0

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

In PowerShell oder jeder anderen 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 mithilfe von xp_cmdshell ebenfalls ausgeblendet wird.

    
Cade Roux 23.01.2009 18:24
quelle