2009-08-24 5 views
3

Sind CLR-gespeicherte Multi-Threading-Prozesse möglich?Multi-Thread-Code in CLR Stored Procs?

Ich habe eine datenintensive Aufgabe mit viel Potenzial für die Parallelisierung. CLR Stored Procs wäre großartig, um den Aufwand für das Verschieben der Daten aus dem Prozess zu entfernen. Ich befürchte, dass ich das parallele Rechnen aufgeben muss.

Was sind meine Optionen?

Hinweis: Wir sind auf dem SQL Server 2005 mit den Plänen im < 4 Monaten Bereich auf SQL Server 2008

Antwort

4

Upgrade Wenn Daten intensiv mit dem Potenzial, Parallelisierung, sollten Sie sie verarbeiten in gesetzt orientierten Art und Weise und lassen Sie SQL das Prozesszeichen paralelisieren, wie es für richtig hält. Sie werden nicht in der Lage sein, etwas schlaueres zu tun, als SQL bereits in Bezug auf die Partitionierung des Datenzugriffs pro CPU tut, es hat einfach Zugriff auf Informationen, die Sie nicht haben (Pufferpool-Füllzustand, Lebensdauer der Seite, CPU/NUMA-Affinität usw.).

Wenn Ihre Verarbeitung skalar-orientiert und CPU-intensiv (und sogar einige Set-orientierte Verarbeitung) ist, platzieren Sie die Verarbeitung in einer UDF-CLR-Funktion und lassen Sie die Ausführung der Abfrage die Funktionsausführung paralelisieren.

Wenn Ihre Verarbeitung irgendeine Art von E/A (dh Webanrufe) hat, tun Sie nicht setzen Sie es in SQL, außerhalb des Serverprozesses platzieren.

Wenn Ihre Verarbeitung wirklich außerhalb all dieser Kategorien fällt und Sie immer noch glauben, dass Sie von Multithreading profitieren können, ist es theoretisch möglich, Threads innerhalb von SQL zu starten. Seien Sie gewarnt, dass der CLR-Host in SQL nicht Ihr normaler CLR-Host ist (dh der bekannte Anwendungs-Host oder der ASP-Host). SQL CLR ist ein dritter Host-Typ, der seine eigenen Grundelemente (Threads, Sperren, Speicherverwaltung usw.) bietet, die über SOS Konstrukte (Arbeiter, Verriegelungen, Speicherangestellte usw.) geschichtet sind. Ich würde dringend davon abraten explizite Multithreading-CLR-Verarbeitung in SQL.

Verwandte Themen