sql >> Databasteknik >  >> RDS >> Sqlserver

Är NOLOCK (Sql Server-tips) dålig praxis?

Innan jag arbetade med Stack Overflow var jag emot NOLOCK på principen att du potentiellt skulle kunna utföra en SELECT med NOLOCK och få tillbaka resultat med data som kan vara inaktuella eller inkonsekventa. En faktor att tänka på är hur många poster som kan infogas/uppdateras samtidigt som en annan process kan välja data från samma tabell. Om detta händer mycket finns det en hög sannolikhet för dödläge om du inte använder ett databasläge som READ COMMITED SNAPSHOT .

Jag har sedan dess ändrat mitt perspektiv på användningen av NOLOCK efter att ha sett hur det kan förbättra SELECT prestanda samt eliminera dödlägen på en massivt laddad SQL Server. Det finns tillfällen då du kanske inte bryr dig om att din data inte är exakt 100 % säkrad och du behöver snabbt tillbaka resultaten även om de kan vara inaktuella.

Ställ dig själv en fråga när du funderar på att använda NOLOCK :

Innehåller min fråga en tabell som har ett högt antal INSERT /UPDATE kommandon och bryr jag mig om data som returneras från en fråga kanske saknar dessa ändringar vid ett givet tillfälle?

Om svaret är nej, använd NOLOCK för att förbättra prestandan.

Jag gjorde precis en snabb sökning efter NOLOCK nyckelordet i kodbasen för Stack Overflow och hittade 138 instanser, så vi använder det på ganska många ställen.

  1. Åtgärda "Aritmetiskt spillfel vid konvertering av IDENTITY till datatyp..." i SQL Server

  2. vad som händer i adop-fasen förbereda

  3. Hur man kör flera MySQL-instanser på samma maskin

  4. SQL Server Error 213:Kolumnnamn eller antal angivna värden matchar inte tabelldefinitionen.