Sembra che tu sappia già cosa suggerisca la tabella NOLOCK
, ma la domanda è "perché" le persone lo usano così frequentemente. Nell'esperienza delle persone, o persone che hanno condiviso esperienze con loro, hanno già alleviato i problemi di concorrenza utilizzando l'hint della tabella read unsmitted .
Nonostante ciò che fa il suggerimento (la mancanza di un blocco condiviso sui dati per impedire il blocco o il blocco), lo usano ancora. Perché? Perché è "facile" sacrificare cose importanti (dati coerenti e puliti, sicurezza, ecc.) Con "correzioni" comuni.
Perché lasciare perdere la possibilità che la query venga bloccata? Basta specificare WITH (NOLOCK)
. 13 caratteri che cancellano ogni pensiero di essere bloccati o bloccati.
Ovviamente questa è una cattiva pratica e potrebbe portare alla lettura di dati sporchi e incoerenti, ma è facile. Normalmente questo viene fatto dagli sviluppatori SQL che non vogliono complicarsi con la risoluzione dei problemi di blocco e altre situazioni di concorrenza, e preferiscono prendere la facile uscita .
My specific question is why is it so overused in every organization I tend to consult with? I've seen it used for every select statement on every tables in the last 3 clients I've been at. What are the possible reasons for this?
Perché quelli che usano e abusano tendono a non capire i sistemi di gestione dei database relazionali o i modelli di concorrenza, e sbaglia dalla parte della generosità invece della pulizia dei dati.
Is the memory/hardware insufficient to get transactions processed?
No, in genere non è il fattore trainante.
Is data consistency less important than it used to be?
La coerenza dei dati dovrebbe essere un obiettivo senza tempo. Il 99% delle volte è per pigrizia o ignoranza che gli sviluppatori lo usano.
What is the general consensus and best practice on using NOLOCK?
La best practice è non usarla a meno che tu non abbia assolutamente provato senza dubbio che ne hai bisogno ed è ok. Semplice come quello.