Frage

Ich habe eine Reihe von gespeicherten Procs, die ich laufen alle gleichzeitig auf dem Server möchten. Im Idealfall alle auf dem Server ohne Vertrauen auf Verbindungen zu einem externen Client.

Welche Möglichkeiten gibt es all diese zu starten und sie gleichzeitig laufen (ich weiß nicht einmal müssen warten, bis alle Prozesse zusätzliche Arbeit zu tun getan)?

Ich habe gedacht:

  • Starten mehr Verbindungen von ein Client, der mit jedem Start entsprechende SP.
  • Einrichten von Jobs für jeder SP und beginnen, die Jobs von einem SQL Server-Verbindung oder SP.
  • Verwenden xp_cmdshell zusätzliche Läufe zu starten äquivalent zu osql oder whetever
  • SSIS - ich brauche, wenn das Paket sehen dynamisch mehr SPs geschrieben werden zu handhaben, weil ich nicht sicher bin, wie vielen Zugang meiner Kunden der Produktion bekommen gehen

In dem Job und cmdshell Fällen bin ich wahrscheinlich in Berechtigungsstufe Probleme aus dem DBA laufen soll ...

SSIS eine gute Option sein könnte -. Wenn ich die SP-Liste Tabellen fahren

Dies ist eine Data-Warehouse Situation, und die Arbeit ist weitgehend unabhängig und NOLOCK universell auf die Sterne verwendet wird. Das System ist eine 8-Wege-32GB-Maschine, also werde ich es herunter laden und skalieren es zurück, wenn ich Probleme zu sehen.

Ich habe im Grunde drei Schichten, Layer 1 hat eine geringe Anzahl von Prozessen und hängt von grundsätzlich alle Fakten / Dimensionen bereits geladen (effektiv, sind die Sterne eine Schicht 0 - und ja, leider werden sie alle müssen geladen werden ), Layer 2 hat eine Reihe von Prozessen, die 1 auf einige oder alle Layer-abhängig sind, und 3 Schicht eine Anzahl von Prozessen hat, die 2. auf einige oder alle Layer abhängen ich die Abhängigkeiten bereits in einer Tabelle haben, und würde nur anfangs starten alle procs in einer bestimmten Schicht in der gleichen Zeit, da sie innerhalb einer Schicht orthogonal sind.

War es hilfreich?

Lösung 4

Am Ende habe ich eine C # Management-Konsole Programm, das die Prozesse startet Async wie sie in der Lage sind zu laufen und verfolgt die Spuren der Verbindungen.

Andere Tipps

Ist SSIS eine Option für Sie? Sie können ein einfaches Paket erstellen mit parallelen SQL Aufgaben Führen Sie die gespeicherte Prozeduren gleichzeitig auszuführen. Allerdings, je nachdem, was Ihre gespeicherten Procs tun, können Sie oder können nicht profitieren bekommen von dieser parallel beginnen (zum Beispiel, wenn sie alle die gleichen Tabelleneinträge zugreifen, kann man für Schlösser warten müssen freigegeben werden usw.)

An einem Punkt habe ich einige die architektonische Arbeit an einem Produkt bekannt als topologische Sortierung sie einen Auftrag zu geben, um zu laufen. Wenn Sie tun dies, müssen Sie die Abhängigkeiten verwalten - all die Vorgänger einer gespeicherten Prozedur durchführen müssen, bevor sie ausgeführt wird. Gerade Starten der sprocs, um auf mehreren Threads nicht dies allein zu erreichen.

Die Implementierung dieses bedeutete, dass viel von der SSIS-Funktionalität auf den Kopf klopfen und einen anderen Scheduler implementieren. Das ist in Ordnung für ein Produkt aber wahrscheinlich übertrieben für ein maßgeschneidertes System. Eine einfachere Lösung ist also:

Sie können die Abhängigkeiten bei einer grobkörnigen Ebene verwalten, indem die ETL vertikal durch die Dimension der Organisation (manchmal bekannt als Thema ETL Oriented ), wo ein einzelne Paket SSIS und eine Reihe von sprocs die Daten nimmt ab zur Herstellung von Abmessungen oder Faktentabellen durch Extraktion. Typischerweise wird meist die Abmessungen Silos untergebracht werden, so werden sie minimal Interdependenz haben. Wo es Interdependenz ist, macht eine Dimension (oder Faktentabelle) Ladeprozess abhängig von was auch immer es braucht Upstream.

wird jeder Lader relativ modular und Sie noch einen nützlichen Grad der Parallelität erhalten, indem die Ladeprozesse parallel zu treten ab und lassen den SSIS-Scheduler es funktioniert. Die Abhängigkeiten werden gewisse Redundanz enthalten. Zum Beispiel einer ODS-Tabelle kann nicht abhängig seine Last auf einer Dimension nicht abgeschlossen, aber das Upstream-Paket selbst nimmt die Komponenten bis hin zum dreidimensionalen Schema, bevor es abgeschlossen ist. Dies ist jedoch nicht wahrscheinlich ein Problem in der Praxis aus folgenden Gründen sein:

  • Der Ladevorgang hat wahrscheinlich viele andere Aufgaben, die in der Zwischenzeit
  • ausführen kann
  • Die meisten ressourcenhungrige Aufgaben werden mit ziemlicher Sicherheit die Tatsache Tabellenlasten sein, die werden meist nicht voneinander abhängig sein. Wo gibt es eine Abhängigkeit (beispielsweise eine Rollup-Tabelle basierend auf dem Inhalt einer anderen Tabelle) kann dies nicht ohnehin vermieden werden.

Sie können die SSIS-Pakete konstruieren, so dass sie alle ihre Konfiguration aus einer XML-Datei aufnehmen und die Lage kann exernally in einer Umgebungsvariablen versorgt werden. So etwas kann ziemlich leicht mit Scheduling-Systemen wie Control-M implementiert werden. Das bedeutet, dass ein modifiziertes SSIS-Paket mit relativ wenig manuellen Eingriffen eingesetzt werden kann. Die Produktionsmitarbeiter die Pakete abgegeben werden kann mit den gespeicherten Prozeduren zu implementieren entlang und manuell Fiedel Konfiguration in den SSIS-Pakete, ohne die Konfigurationsdateien auf einer Pro-Umwelt Basis mainain kann.

Sie können an den Service-Brokern aussehen wollen und es ist die Aktivierung gespeicherte Prozeduren ... könnte eine Option sein ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top