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.