Frage

Ich habe eine große Umwandlung Job- 299Gb von JPEG-Bildern, die bereits in der Datenbank, in Thumbnail-Äquivalente für die Berichterstattung und Bandbreite Zwecke.

Ich habe einen Thread-sicher SQLCLR Funktion geschrieben, um das Geschäft der neu Abtasten der Bilder, schöne Arbeit zu tun.

Das Problem ist, wenn ich es in einer UPDATE Anweisung (aus dem PhotoData Feld zum ThumbData Feld) ausführen, das linear Rennbedingungen zu verhindern ausführt, nur ein Prozessor unter Verwendung der Bilder sampeln.

Also, wie würde ich am besten nutzen die 12 Kerne und phat RAID-Setup diese Datenbank Maschine hat? Ist es eine Unterabfrage in der FROM Klausel der Update-Anweisung zu benutzen? Ist das alles, was erforderlich Parallelität auf dieser Art von Betrieb zu ermöglichen?

Wie auch immer der Betrieb in Partien aufgeteilt wird, um die 4000 Bilder pro Charge (in einer Fenster Abfrage von etwa 391K Bildern), hat diese Maschine viele Ressourcen zu verbrennen.

War es hilfreich?

Lösung

Ich empfehle auch den „Round-Robin“ -Methode von kragen2uk und onupdatecascade befürwortete (Ich wähle sie nach oben). Ich weiß, dass ich etwas irritierend über CLR-Routinen und SQL Parallelität gelesen habe, aber ich vergessen, was es gerade jetzt war ... aber ich denke, sie spielen nicht gut zusammen.

Das Bit ich in der Vergangenheit auf ähnliche Aufgaben erledigt habe es eine Tabelle mit jedem Charge von Arbeit einzurichten getan zu werden. Für jede Verbindung, die Sie feuern, geht es zu dieser Tabelle, die nächste Charge Gest, markiert sie als verarbeitet werden, verarbeitet sie, aktualisiert er als Fertig, und wiederholt sich. Auf diese Weise können Sie die Leistung messen, verwalten Skalierung ermöglichen Stopps und Neustarts, ohne von vorne zu beginnen, und gibt Ihnen etwas zu zeigen, wie vollständig die Aufgabe ist (allein zeigen lassen, dass es tatsächlich etwas zu tun).

Andere Tipps

Bitte überprüfen Sie die Konfiguration für maximalen Grad der Parallelität (MAXDOP) auf dem SQL-Server einstellen. Sie können auch den Wert von MAXDOP eingestellt.

könnte Dieser Link für Sie nützlich sein http://www.mssqltips.com/ tip.asp? Spitze = 1047

cheers

Könnten Sie die Abfrage in Chargen nicht geteilt, und führen Sie jede Partie separat auf einem separaten Anschluss? SQL Server verwendet nur Parallelität in einer Abfrage, wenn es, wie es sich anfühlt, und obwohl man sie stoppen kann, oder sogar (ein wenig) fördern, indem sie die Kostenschwelle für Parallelität Option O zu ändern, aber ich denke, es ist ziemlich hit and miss.

Eine Sache, das ist erwähnenswert ist, dass es nur darum, ob oder nicht entscheiden, die Zeit zu nutzen Parallelität bei, dass die Abfrage kompiliert wird. Auch wenn die Abfrage zu einem Zeitpunkt erstellt wird, wenn die CPU-Auslastung ist höher, SQL Server ist weniger wahrscheinlich, dass die Parallelität zu berücksichtigen.

einige Kriterien, um einen Satz in verschiedene Untergruppen von Reihen zu brechen (1-100, 101-200, was auch immer) und dann Update-Anweisung aus mehreren Verbindungen gleichzeitig aufrufe, wobei jede Verbindung eine Teilmenge von Zeilen Griffe in der Tabelle. Alle Verbindungen sollten parallel ausgeführt werden.

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