sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er række-, side- og tabellåse? Og hvornår er de erhvervet?

Rækkelås

En rækkelås er det laveste niveau af granularitet af låsning muligt i SQL Server. Dette betyder, at en eller flere specifikke rækker vil blive låst, og de tilstødende rækker er stadig tilgængelige for låsning ved samtidige forespørgsler.

Sidelås

En sidelås i SQL Server vil låse 8K værdi af data, selv når din forespørgsel kun behøver 10 bytes fra siden. Så din forespørgsel vil låse yderligere data, som du ikke anmoder om i din forespørgsel.

Hobt Lock

Når en tabel er partitioneret med "SQL Server Table partitionering" er det muligt, at en enkelt partition vil blive låst (Hobt står for Heap eller B-Tree)

Bemærk: Låseskalering til HOBT-låse er deaktiveret som standard. kør ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) for at aktivere HOBT-låseskalering.

Bordlås

En bordlås låser hele bordet.

Hvad er datasider

Microsoft SQL Server organiserer alle sine data i "Data Pages", som kan indeholde 8K værdi af data. Dette betyder, at for enhver dataadgang i SQL Server vil 8K information blive læst.

Datasider kan kun indeholde information fra én tabel, og layoutet af en side er veldokumenteret på MSDN

Det faktum, at SQL Server altid læser en komplet dataside, giver dig også en idé om, hvorfor den foretrækker at bruge sideniveaulåse. Konsekvensen af ​​låse på sideniveau er, at du muligvis låser meget flere data, end du tror.

Antag for eksempel, at vi har en tabel med en samlet poststørrelse på 1024 bytes med et klynget indeks i feltet ID . Når vi kører følgende forespørgsel:SELECT * from MyTable (xlock) where ID = 123 ikke kun den post vil blive låst, men (afhængigt af sideudfyldningen) vil maksimalt 3 yderligere poster også blive låst.

Hvornår erhverves disse låse

En forespørgsel vil blive parset af forespørgselsregulatoren, og de nødvendige låse vil blive bestemt og anmodet om fra låseadministratoren. SQL Server vil forsøge at skabe en balance mellem ydeevne og strid for at bestemme låsestrategien.

SQL Server følger også et "låseskalering"-system, som vil reducere granulariteten af ​​låsning, når mere end 5000 låse af en bestemt type bliver anskaffet. Se denne artikel om låseeskalering for at få flere oplysninger.

Denne adfærd kan justeres ved hjælp af låsetips med stress på tip , i en forespørgsel kan du angive pr. tabel, hvilken slags låse du foretrækker. SQL Server vil forsøge at efterkomme din anmodning, men den vil stadig anvende låseeskalering.




  1. 5 gode grunde til at downloade og bruge Microsoft Access-skabeloner

  2. Driver.getConnection hænger ved hjælp af SQLServer-driver og Java 1.6.0_29

  3. Brug af jsonb_set() til at opdatere specifik jsonb-arrayværdi

  4. Hvad er forskellen mellem MyISAM og InnoDB?