Kayıtlı bir yordamla birden çok sipariş işlemcisi tarafından erişilen bir sipariş kuyruğum var. Her işlemci, sonraki 20 siparişi kendi kullanımı için kilitlemek için kullanılan benzersiz bir kimlikten geçer. Saklanan prosedür daha sonra, bu kayıtları, üzerinde harekete geçecek olan sipariş işlemcisine geri gönderir.SQL Server İşlem Kuyruk Yarışı Koşulu
çoklu işlemcilerin, aynı anda üzerinde çalıştıkları aynı noktada 'OrderTable' kaydı'u alabilecekleri durumlar vardır. Bu sonuçta süreçte daha sonra atılan hatalarla sonuçlanır.
Bir sonraki adımım, her bir işlemcinin tüm mevcut siparişleri almasına ve yalnızca işlemcileri dolaştırmasına izin vermektir; ancak bu kod parçasının bu bölümünü güvenli hale getirmeyi ve işlemcilerin istedikleri zaman kayıtları almalarını sağlamayı umuyorum.
Açıkça - Neden bu yarış koşulunu yaşıyorum ve sorunu nasıl çözebilirim.
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
@Keltex "(SQL Mutexs) Kendi Kilitler oluşturarak Yardım eşzamanlılık"
: Açıkçası o bilmek istiyor Bu saklı yordamı yeniden yazmak için, iki işlemcinin aynı kayıtları/işlemleri işlemesine neden olmaz. – Welbog