Skip to content
App Stretch
  • Home
  • / Articles
  • /
  • SQL Server Lock Escalation explicat

SQL Server Lock Escalation explicat

ianuarie 7, 2022Articles

Salut prieteni,

am scris un post pe blog-ul de blocare la nivel de partiție în cazul în care am demonstrat cum încuietori sunt escaladate de la rând la partiție. Postarea de pe blog este aici;

câțiva cititori mi-au scris înapoi întrebându-mă când SQL Server escaladează blocările rândului la blocări la nivel de tabel sau partiție. Deci, în acest post, voi vorbi despre SQL Server lock escaladare.

Ei bine, motorul DB are o componentă numită manager de blocare, care escaladează încuietori cu granulație fină (rânduri& încuietori de pagină) la încuietori cu granulație mai grosieră (partiții sau încuietori de masă) în 2 circumstanțe:

1. Când se atinge pragul de blocare care, conform BOL, este de 5000 (pentru o singură instanță a obiecției în cauză)

2. Când se atinge pragul de memorie pentru Lock Manager, chiar dacă numărul de încuietori prag de 5000 nu este atins.

permiteți-mi să vă demonstrez rapid acest lucru:

am scris următoarea interogare:

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

puteți vedea că plasez încuietori de 5000 de rânduri, dar când executați SYS.dm_tran_locks DMV, puteți vedea că blocarea tabelului a fost achiziționată.

select*fromsys.dm_tran_lock

Ei bine, acest lucru este perfect în conformitate cu BOL. Cu toate acestea, mă jucam cu numerele și am schimbat valoarea la 4900. Înainte de a rula interogarea de modificare de fiecare dată, nu uitați să ROLLBACK TRAN.

ROLLBACKTRAN BEGINTRANUPDATETOP (4900) Person.ContactSET EmailPromotion = 0

am fugit din nou DMV și de data aceasta, de asemenea, am văzut o blocare de masă. Probabil, de data aceasta m-am așteptat la 4900 de încuietori de rând. Dar poate fi pragul de memorie a fost atins, așa că am continuat să joc cu numerele până când am constatat că pragul de pe sistemul meu este 4707/4708; în cazul în care, dacă numărul de încuietori rând sunt 4708 sau mai mult, motorul DB escaladează acest lucru la o blocare de masă, altceva nimic sub acest număr este acele multe încuietori rând.

deci, dacă am executa următoarele (ROLLBACK orice tranzacție anterioară):

BEGINTRANUPDATETOP (4707) Person.ContactSET EmailPromotion = 0

și apoi verificați DMV, veți vedea cele mai multe încuietori rând. Puteți rula următoarele:

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

cu toate acestea, când schimb valoarea la 4708, se întâmplă escaladarea. (ROLLBACK tranzacția anterioară)

BEGINTRANUPDATETOP (4708) Person.ContactSET EmailPromotion = 0

rulați din nou DMV:

Write a Reply or Comment Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Articole recente

  • înlocuirea automată a sticlei și parbrizului în Tempe
  • Stu Shea, câștigător 2020 Wash100, comentarii despre eforturile de ajutorare Covid-19 ale lui Peraton
  • Blogul acelei fete: luând notițe de mână
  • Ce să faci când te gândești la divorț
  • $ 3 Trader Joe congelator culoar găsi copiii mei în mod constant mă implor să fac
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Arhive

  • martie 2022
  • februarie 2022
  • ianuarie 2022
  • decembrie 2021

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