Wie Sie Tabellen sperren in SQL Server 2005, und sollte ich es überhaupt tun?

Diese wird näher erklärt werden. Was ich getan habe ist, erstellen Sie einen benutzerdefinierten message queue in SQL Server 2005. Ich habe eine Tabelle mit Nachrichten, die Zeitstempel für beide Anerkennung und Abschluss. Die gespeicherte Prozedur, die Anrufer ausführen, erhalten Sie die nächste Nachricht in Ihrer Warteschlange an und bestätigt die Meldung. So weit So gut. Gut, wenn das system erlebt einen massiven Betrag der Transaktionen (in tausend pro minute), ist es nicht möglich, für eine Nachricht, die bestätigt wird durch eine andere Ausführung der gespeicherten Prozedur, während ein anderer bereit ist, zu sich selbst? Lassen Sie mich helfen, indem Sie zeigen, mein SQL-code an die gespeicherte Prozedur:

--Grab the next message id
declare @MessageId uniqueidentifier
set @MessageId = (select top(1) ActionMessageId from UnacknowledgedDemands);

--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId

--Select the entire message
...
...

Im obigen code konnte nicht eine andere gespeicherte Prozedur ausgeführt in der gleichen Zeit die gleiche id, und versuchen Sie, es zu bestätigen in der gleichen Zeit? Könnte ich (oder sollte ich) implementieren Sie eine Art von sperren, die verhindern, dass eine andere gespeicherte Prozedur aus der Bestätigung der Nachrichten, dass eine andere gespeicherte Prozedur Abfragen?

Wow, hat das überhaupt Sinn? Es ist ein bisschen schwierig, zu den Worten...

möchten Sie vielleicht re-tag, damit "bestpractice" änderungen an Häufig verwendeten "best-practices"

InformationsquelleAutor Kilhoffer | 2008-09-11

Schreibe einen Kommentar