Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Warunki wyścigu kolejki procesów SQL Server

Edycja:

Wygooglowałem, aby sprawdzić moją odpowiedź:„Przetwarzanie kolejek danych w SQL Server z READPAST i UPDLOCK”. Minęły lata, odkąd czytałem i bawiłem się tym rozwiązaniem.

Oryginał:

Jeśli użyjesz wskazówki READPAST, zablokowane wiersze zostaną pominięte. Użyłeś ROWLOCK, więc powinieneś unikać eskalacji blokady. Potrzebujesz również UPDLOCK, jak się dowiedziałem.

Tak więc proces 1 blokuje 20 wierszy, proces 2 zajmuje kolejne 20, proces 3 zajmuje wiersze od 41 do 60 itd.

Aktualizację można również napisać w następujący sposób:

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

Odśwież, październik 2011

Można to zrobić bardziej elegancko za pomocą klauzuli OUTPUT, jeśli potrzebujesz SELECT i UPDATE za jednym razem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wysłać e-mail z SQL Server?

  2. Zaktualizować tabelę za pomocą JOIN w programie SQL Server?

  3. Klauzula SQL WHERE dopasowująca wartości z końcowymi spacjami

  4. Aktualizacja zbiorcza w C#

  5. 11 najlepszych praktyk dotyczących indeksowania SQL Server w celu poprawy wydajności dostrajania