sql >> Databáze >  >> RDS >> Sqlserver

Je NOLOCK (nápověda pro SQL Server) špatný postup?

Před prací na Stack Overflow jsem byl proti NOLOCK na principu, že byste mohli potenciálně provést SELECT s NOLOCK a získat zpět výsledky s daty, které mohou být zastaralé nebo nekonzistentní. Faktorem k zamyšlení je, kolik záznamů lze vložit/aktualizovat současně, jiný proces může vybírat data ze stejné tabulky. Pokud k tomu dochází často, existuje vysoká pravděpodobnost uváznutí, pokud nepoužijete databázový režim, jako je READ COMMITED SNAPSHOT .

Od té doby jsem změnil svůj pohled na používání NOLOCK poté, co jsme viděli, jak to může zlepšit SELECT výkon a také odstranění zablokování na masivně zatíženém serveru SQL Server. Jsou chvíle, kdy vám může být jedno, že vaše data nejsou přesně 100% odevzdaná a potřebujete rychle zpět výsledky, i když mohou být zastaralé.

Když přemýšlíte o použití NOLOCK, položte si otázku :

Zahrnuje můj dotaz tabulku, která má vysoký počet INSERT /UPDATE a zajímá mě, jestli v datech vrácených z dotazu mohou v daném okamžiku tyto změny postrádat?

Pokud je odpověď ne, použijte NOLOCK ke zlepšení výkonu.

Právě jsem provedl rychlé vyhledávání NOLOCK klíčové slovo v kódové základně pro Stack Overflow a našlo 138 instancí, takže je používáme na několika místech.

  1. Jak zaokrouhlit časové razítko v MySQL

  2. Funkce REGEXP_INSTR() v Oracle

  3. Predikátový řád je důležitý v rozšířených událostech

  4. Jak vypnu vypršení platnosti hesla Oracle?