sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är rad-, sid- och tabelllås? Och när de förvärvas?

Radlås

Ett radlås är den lägsta nivån av granularitet för låsning som är möjlig i SQL Server. Detta innebär att en eller flera specifika rader kommer att låsas, och de intilliggande raderna är fortfarande tillgängliga för låsning av samtidiga frågor.

Sidlås

Ett sidlås i SQL Server kommer att låsa 8K data även när din fråga bara behöver 10 byte från sidan. Så din fråga kommer att låsa ytterligare data som du inte begär i din fråga.

Hobt Lock

När en tabell är partitionerad med "SQL Server Table Partitioning" är det möjligt att en enskild partition kommer att låsas (Hobt står för Heap eller B-Tree)

Obs! Låseskalering till HOBT-lås är inaktiverat som standard. kör ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) för att aktivera HOBT-låseskalering.

Bordslås

Ett bordslås låser hela tabellen.

Vad är datasidor

Microsoft SQL Server organiserar all sin data i "Datasidor" som kan innehålla 8K värde av data. Detta innebär att för all dataåtkomst i SQL Server kommer 8K information att läsas.

Datasidor kan bara innehålla information från en tabell och layouten på en sida är väldokumenterad på MSDN

Det faktum att SQL Server alltid kommer att läsa en komplett datasida ger dig också en uppfattning om varför den föredrar att använda sidnivålås. Innebörden av sidnivålås är att du kan låsa mycket mer data än du tror.

Anta till exempel att vi har en tabell med en total poststorlek på 1024 byte med ett klustrat index i fältet ID . När vi kör följande fråga:SELECT * from MyTable (xlock) where ID = 123 inte bara den posten kommer att låsas, utan (beroende på sidfyllningen) kommer maximalt 3 ytterligare poster att låsas också.

När köps dessa lås

En fråga kommer att analyseras av frågeguvernören och de nödvändiga låsen kommer att fastställas och begäras från låshanteraren. SQL Server kommer att försöka göra en balans mellan prestanda och strid för att fastställa låsstrategin.

SQL Server följer också ett "låseskalering"-system som kommer att minska granulariteten i låsning när mer än 5000 lås av en viss typ skaffas. Se den här artikeln om låseskalering för mer information.

Detta beteende kan justeras med låsningstips med stress på tips , i en fråga kan du per tabell ange vilken typ av lås du föredrar. SQL Server kommer att försöka uppfylla din begäran, men den kommer fortfarande att tillämpa låseskalering.




  1. Kontrollera för x dagar i följd - givna tidsstämplar i databasen

  2. Oracle instantclient DYLD_LIBRARY_PATH-fel

  3. MySQL Performance – 5 parametrar från konfigurationsfilen

  4. Timeout för OracleDataReader.Read-metoden