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

TABLOCK vs TABLOCKX

Duża różnica, TABLOCK spróbuje złapać "wspólne" blokady i TABLOCKX ekskluzywne zamki.

Jeśli jesteś w transakcji i złapiesz wyłączną blokadę na stole, Np.:

SELECT 1 FROM TABLE WITH (TABLOCKX)

Żadne inne procesy nie będą w stanie pobrać żadnego blokady na stole, co oznacza wszystkie zapytania próbujące rozmawiać z tabelą będą blokowane do momentu zatwierdzenia transakcji.

TABLOCK chwyta tylko współdzieloną blokadę, współdzielone blokady są zwalniane po wykonaniu instrukcji, jeśli izolacja transakcji jest READ COMMITTED (domyślna). Jeśli twój poziom izolacji jest wyższy, na przykład:SERIALIZABLE , współdzielone blokady są utrzymywane do końca transakcji.

Wspólne zamki są, hmmm, wspólne. Oznacza to, że dwie transakcje mogą jednocześnie odczytywać dane z tabeli, jeśli obie mają blokadę S lub IS na tabeli (poprzez TABLOCK ). Jeśli jednak transaction A utrzymuje wspólną blokadę na stole, transaction B nie będzie w stanie przejąć blokady na wyłączność, dopóki wszystkie blokady współdzielone nie zostaną zwolnione. Przeczytaj o tym, które zamki są kompatybilne z którymi na msdn.

Obie wskazówki powodują, że baza danych omija przyjmowanie bardziej szczegółowych blokad (takich jak blokady na poziomie wiersza lub strony). Zasadniczo bardziej szczegółowe blokady umożliwiają lepszą współbieżność. Na przykład jedna transakcja może aktualizować wiersz 100 w Twojej tabeli, a inny wiersz 1000 w tym samym czasie z dwóch transakcji (jest to trudne z blokadą strony, ale pomińmy to).

Ogólnie rzecz biorąc, potrzebujesz szczegółowych blokad, ale czasami możesz chcieć zmniejszyć współbieżność bazy danych, aby zwiększyć wydajność konkretnej operacji i wyeliminować ryzyko zakleszczeń.

Generalnie nie używałbyś TABLOCK lub TABLOCKX chyba że jest to absolutnie konieczne w przypadku jakiejś skrajnej sprawy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacz SQL Server:zrozumienie i alternatywy

  2. Pamięć podręczna bufora:co to jest i jak wpływa na wydajność bazy danych?

  3. SQL Recursive CTE:Znajdowanie obiektów połączonych przez właściwość

  4. Jak znaleźć sortowanie w SQL Server (T-SQL)

  5. SQL INSERT INTO z wielu tabel