Det finns ingen funktion som uttryckligen kallas "Tab Lock" i SQL Server. SQL Servers låsmekanismer är mer nyanserade än ett enkelt "fliklås." Vad du kanske tänker på, eller vad någon i allmänhet kan hänvisa till som ett "fliklås", hänvisar troligen till ett av dessa scenarier:
* Låsning på bordsnivå: Detta är den närmaste SQL -servern kommer till ett "fliklås." I vissa situationer kan SQL Server förvärva ett delat (er) eller exklusivt (X) -lås på bordnivån. Detta innebär att hela tabellen är låst, vilket förhindrar andra samtidiga operationer från att modifiera eller till och med läsa (beroende på låstypen) tills låset har släppts. Detta händer ofta med dåligt utformade frågor eller under hög stridighet. Det är inte en avsiktlig inställning du väljer; Det är en konsekvens av frågeställningen och den valda isoleringsnivån.
* Missförståelse av lås på radnivå: SQL Server använder främst låsning på radnivå. Detta innebär att endast de specifika raderna som modifieras är låsta, vilket gör att andra användare samtidigt kommer åt och modifiera andra rader i samma tabell. Men om många rader uppdateras samtidigt, kan systemet fortfarande uppleva prestandaförstöring även om det inte är ett komplett "fliklås."
* schema modifieringslås: När du ändrar en tabells struktur (lägger till, modifierar eller tar bort kolumner, lägger till index etc.), placerar SQL Server lås för att förhindra samtidig modifiering av tabellschemat. Dessa tillämpas implicit och är vanligtvis kortlivade.
Varför ser du sällan faktiska "fliklås" i en modern SQL -servermiljö:
* Prestationskonsekvenser: Tabellnivålås begränsar starkt samtidighet och kan leda till betydande flaskhalsar. De är mycket oönskade i de flesta scenarier.
* Låsoptimering på radnivå: SQL Server's Query Optimizer strävar efter att använda raden på radnivå när det är möjligt för att maximera samtidigheten.
* isoleringsnivåer: Den valda isoleringsnivån (läs otillåten, läst engagerad, repeterbar läsning, serialiserbar) påverkar hur lås förvärvas och hålls, vilket ytterligare påverkar sannolikheten för låsnivå-låsning.
Sammanfattningsvis: Även om termen "fliklås" inte är tekniskt korrekt för SQL Server, används det informellt för att beskriva situationer där hela tabellen är låst på grund av frågeställning eller schemaändringar. Detta är vanligtvis ett symptom på ett problem snarare än en avsiktlig egenskap. Om du stöter på prestationsproblem som visas som ett "fliklås", undersök dina frågor, indexering och isoleringsnivåer för att förstå och optimera din databass samtidighetsmodell. Att analysera lås väntar med hjälp av verktyg som `SP_WHOISACTIVE 'eller SQL Server Profiler hjälper till att diagnostisera grundorsaken.