Skip to content
App Stretch
  • Home
  • / Articles
  • /
  • Wyjaśniono eskalację blokady SQL Server

Wyjaśniono eskalację blokady SQL Server

7 stycznia, 2022Articles

Cześć przyjaciele,

napisałem post na blogu o blokowaniu na poziomie partycji, w którym zademonstrowałem, w jaki sposób blokady są eskalowane z rzędu na partycję. Wpis na blogu jest tutaj;

kilku czytelników odpisało do mnie z pytaniem Kiedy SQL Server eskaluje blokady wierszy do blokad na poziomie tabeli lub partycji. W tym poście opowiem o eskalacji blokady SQL Server.

Cóż, silnik DB ma komponent o nazwie Lock Manager, który eskaluje zamki drobnoziarniste (rzędy & zamki stronicowe) do bardziej gruboziarnistych zamków (zamki przegródkowe lub stołowe) w 2 okolicznościach:

1. Po osiągnięciu progu blokady, który według BOL wynosi 5000 (dla pojedynczej instancji rozpatrywanego sprzeciwu)

2. Po osiągnięciu progu pamięci dla Lock Managera, nawet jeśli nie zostanie osiągnięty próg liczby zamków wynoszący 5000.

pozwól, że ci to szybko zademonstruję:

napisałem następujące zapytanie:

USE AdventureWorksGO BEGINTRANUPDATETOP (5000) Person.ContactSET EmailPromotion = 0

możesz zobaczyć, że umieszczam 5000 blokad wierszy, ale po uruchomieniu SYS. dm_tran_locks DMV, możesz zobaczyć, że blokada tabeli została przejęta.

select*fromsys.dm_tran_lock

Cóż, to idealnie pasuje do BOL. Jednak bawiłem się liczbami i zmieniłem wartość na 4900. Przed każdym uruchomieniem zapytania o modyfikację nie zapomnij wycofać TRAN.

ROLLBACKTRAN BEGINTRANUPDATETOP (4900) Person.ContactSET EmailPromotion = 0

ponownie uruchomiłem DMV i tym razem również zobaczyłem blokadę stołu. Prawdopodobnie, tym razem spodziewałem się 4900 zamków rzędowych. Ale może być próg pamięci został osiągnięty, więc kontynuowałem grę z numerami, dopóki nie odkryłem, że próg w moim systemie to 4707/4708; gdzie jeśli liczba blokad wiersza wynosi 4708 lub więcej, silnik DB eskaluje to do blokady stołu, w przeciwnym razie wszystko poniżej tej liczby to te wiele blokad wiersza.

więc jeśli wykonam następujące czynności (wycofam każdą wcześniejszą transakcję):

BEGINTRANUPDATETOP (4707) Person.ContactSET EmailPromotion = 0

A potem sprawdź w wydziale komunikacji, zobaczysz te liczne zamki. Możesz uruchomić następujące:

select resource_type,resource_database_id,resource_description,resource_associated_entity_id,request_mode,request_type,request_statusfrom sys.dm_tran_lockswhere resource_database_id = DB_ID();

1_SQL_Server_2008_Lock_Escalation_explained

jednak kiedy zmieniam wartość na 4708, następuje eskalacja. (Wycofaj wcześniejszą transakcję)

BEGINTRANUPDATETOP (4708) Person.ContactSET EmailPromotion = 0

Uruchom ponownie DMV:

Write a Reply or Comment Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Ostatnie wpisy

  • wymiana szyb samochodowych i szyb samochodowych w Tempe
  • Stu Shea, Zwycięzca Wash100 2020, komentarze na temat działań humanitarnych Covid-19 firmy Peraton
  • Blog tej dziewczyny: robienie notatek ręcznie
  • Co zrobić, gdy myślisz o rozwodzie
  • the $ 3 Trader Joe ’ s Freezer Aisle Find My Kids stale błagają mnie o zrobienie
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Archiwa

  • marzec 2022
  • luty 2022
  • styczeń 2022
  • grudzień 2021

Copyright App Stretch 2022 | Theme by ThemeinProgress | Proudly powered by WordPress