sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Process Queue Race Condition

Redigera:

Jag googlade för att kontrollera mitt svar:"Bearbetar dataköer i SQL Server med READPAST och UPDLOCK". Det har gått år sedan jag läste om och lekte med den här lösningen.

Original:

Om du använder READPAST-tipset hoppas du över låsta rader. Du har använt ROWLOCK så du bör undvika låseskalering. Du behöver också UPDLOCK, som jag fick reda på.

Så process 1 låser 20 rader, process 2 tar nästa 20, process 3 tar rader 41 till 60 osv.

Uppdateringen kan också skrivas så här:

UPDATE TOP (20)
    foo
SET
    ProcessorID = @PROCID
FROM
    OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0

Uppdatera, okt 2011

Detta kan göras mer elegant med OUTPUT-satsen om du behöver en SELECT och en UPPDATERING på en gång.



  1. PostgreSQL-frågan körs snabbare med indexskanning, men motorn väljer hash join

  2. SQL Server 2016:Infoga data

  3. Hur visar man Oracle-schemastorlek med SQL-fråga?

  4. 4 typer av information att inkludera i din CRM-databas