SQL Server-Prozesswarteschlangenbedingung

Habe ich eine order-Warteschlange, die für den Zugriff durch mehrere um Prozessoren über eine gespeicherte Prozedur. Jeder Prozessor geht in eine eindeutige ID, die verwendet wird, um zu sperren, die nächsten 20 Bestellungen für den eigenen Gebrauch. Die gespeicherte Prozedur gibt dann auch diese Einträge der Reihenfolge Prozessor eingewirkt werden.

Gibt es Fälle, wo mehrere Prozessoren sind in der Lage, zum abrufen der gleichen 'OrderTable' record, an welcher Stelle Sie versuchen gleichzeitig zu betreiben. Dies resultiert letztlich in Fehlern geworfen werden, die später im Prozess.

Meine nächste Kurs der Aktion ist es, jeden Prozessor greifen alle mögliche Aufträge und nur round-robin-Prozessoren, aber ich hatte gehofft, einfach nur in diesem Abschnitt von code, thread-sicher und ermöglichen die Prozessoren zu greifen Aufzeichnungen, Wann immer Sie möchten.

So Explizit - keine Ahnung warum ich bin in diesem race condition und wie ich das problem lösen kann.

BEGIN TRAN
    UPDATE  OrderTable WITH ( ROWLOCK )
    SET     ProcessorID = @PROCID
    WHERE   OrderID IN ( SELECT TOP ( 20 )
                                        OrderID
                                FROM    OrderTable WITH ( ROWLOCK )
                                WHERE   ProcessorID = 0)
COMMIT TRAN


SELECT  OrderID, ProcessorID, etc...
FROM    OrderTable
WHERE   ProcessorID = @PROCID
Kommentar zu dem Problem
@Keltex: Natürlich will er wissen, wie umschreiben Sie diese gespeicherte Prozedur, so dass es nicht dazu führen, dass zwei Prozessoren verarbeiten den gleichen Datensatz(s). Kommentarautor: Welbog

InformationsquelleAutor der Frage William Edmondson | 2009-06-02

Schreibe einen Kommentar