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

AKTUALIZUJ + Z (ROWLOCK) + CTE

NOLOCK nie dotyczy części zapytania, która odwołuje się do tabeli, która ma zostać zmodyfikowana. W instrukcjach aktualizacji programu SQL Server na krótko zablokuj każdy wiersz podczas testowania. Jest to mechanizm unikania impasu. Zapobiega to wielokrotnym aktualizacjom każdego wiersza S-lock do odczytu, a następnie próbuje go zablokować.

Nie możesz sprawić, że U-locks znikną AFAIK. Możesz jednak zredukować liczbę rzędów z blokadą U do absolutnego minimum, łącząc się samoczynnie:

update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)

To dodaje trochę narzutu, ale pozwala na użycie NOLOCK do czytania.

Rozważ użycie izolacji migawki do odczytów. NOLOCK ma pewne problemy, takie jak losowe przerywanie zapytań.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stronicowanie po stronie serwera w SQL Server

  2. Nazwa kolumn zmiennych SQL Server?

  3. Praktyczny wybór procesorów dla obciążeń SQL Server 2014/2016 OLTP

  4. WSTAWIENIE ZBIORCZE brakuje ostatniego wiersza?

  5. Flask-SQLAlchemy inna liczba rekordów dla .count() i .all()