sql >> Database >  >> RDS >> Sqlserver

Wat zijn rij-, pagina- en tabelvergrendelingen? En wanneer zijn ze verworven?

Rijvergrendeling

Een rijvergrendeling is het laagste niveau van vergrendeling dat mogelijk is in SQL Server. Dit betekent dat een of meer specifieke rijen worden vergrendeld en dat de aangrenzende rijen nog steeds beschikbaar zijn voor vergrendeling door gelijktijdige zoekopdrachten.

Paginavergrendeling

Een paginavergrendeling in SQL Server vergrendelt 8K aan gegevens, zelfs wanneer uw zoekopdracht slechts 10 bytes van de pagina nodig heeft. Uw zoekopdracht vergrendelt dus aanvullende gegevens die u niet opvraagt ​​in uw zoekopdracht.

Hobt-slot

Wanneer een tabel is gepartitioneerd met "SQL Server Table partitioning" is het mogelijk dat een enkele partitie wordt vergrendeld (Hobt staat voor Heap of B-Tree)

Opmerking: Escalatie van vergrendelingen naar HOBT-sloten is standaard uitgeschakeld. voer ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) om HOBT-vergrendelingsescalatie in te schakelen.

Tabelslot

Een tafelvergrendeling vergrendelt de hele tafel.

Wat zijn gegevenspagina's

Microsoft SQL Server organiseert al zijn gegevens in "Data Pages" die 8K aan gegevens kunnen bevatten. Dit betekent dat voor elke gegevenstoegang in SQL Server 8K informatie wordt gelezen.

Gegevenspagina's kunnen slechts informatie uit één tabel bevatten en de lay-out van een pagina is goed gedocumenteerd op MSDN

Het feit dat SQL Server altijd een volledige gegevenspagina leest, geeft u ook een idee waarom het de voorkeur geeft aan vergrendelingen op paginaniveau. De implicatie van vergrendelingen op paginaniveau is dat u veel meer gegevens kunt vergrendelen dan u denkt.

Stel bijvoorbeeld dat we een tabel hebben met een totale recordgrootte van 1024 bytes met een geclusterde index op het veld ID . Wanneer we de volgende query uitvoeren:SELECT * from MyTable (xlock) where ID = 123 niet alleen dat record wordt vergrendeld, maar (afhankelijk van de paginavulling) maximaal 3 extra records worden ook vergrendeld.

Wanneer worden deze sloten verkregen

Een query wordt door de query-gouverneur ontleed en de vereiste sloten worden bepaald en opgevraagd bij de sluisbeheerder. SQL Server zal proberen een balans te vinden tussen prestatie en strijd om de vergrendelingsstrategie te bepalen.

SQL Server volgt ook een "lock escalatie"-systeem dat de granulariteit van vergrendeling zal verminderen wanneer meer dan 5000 vergrendelingen van een bepaald type worden verkregen. Zie dit artikel over escalatie van vergrendelingen voor meer informatie.

Dit gedrag kan worden aangepast met behulp van vergrendeltips met nadruk op hints , in een query kun je per tabel aangeven wat voor soort sloten je voorkeur heeft. SQL Server zal proberen uw verzoek te honoreren, maar het zal nog steeds vergrendelings-escalatie toepassen.




  1. SQL Server Failover Cluster Installatie -2

  2. Oracle:wat is de situatie om RAISE_APPLICATION_ERROR te gebruiken?

  3. Meer showplan-verbeteringen? Ja graag!

  4. Hoe maak ik een opgeslagen procedure die optioneel in kolommen zal zoeken?