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

Er NOLOCK (Sql Server-tip) dårlig praksis?

Før jeg arbejdede på Stack Overflow, var jeg imod NOLOCK på princippet, at du potentielt kunne udføre en SELECT med NOLOCK og få resultater tilbage med data, der kan være forældede eller inkonsekvente. En faktor at tænke på er, hvor mange poster der kan indsættes/opdateres på samme tid en anden proces kan vælge data fra den samme tabel. Hvis dette sker meget, er der stor sandsynlighed for dødvande, medmindre du bruger en databasetilstand såsom READ COMMITED SNAPSHOT .

Jeg har siden ændret mit perspektiv på brugen af ​​NOLOCK efter at have set, hvordan det kan forbedre SELECT ydeevne samt eliminere dødvande på en massivt belastet SQL Server. Der er tidspunkter, hvor du måske er ligeglad med, at dine data ikke ligefrem er 100 % forpligtede, og du har brug for resultater hurtigt tilbage, selvom de kan være forældede.

Stil dig selv et spørgsmål, når du tænker på at bruge NOLOCK :

Indeholder min forespørgsel en tabel, der har et højt antal INSERT /UPDATE kommandoer, og er jeg ligeglad med, om de data, der returneres fra en forespørgsel, måske mangler disse ændringer på et givet tidspunkt?

Hvis svaret er nej, så brug NOLOCK for at forbedre ydeevnen.

Jeg har lige udført en hurtig søgning efter NOLOCK søgeord i kodebasen for Stack Overflow og fundet 138 forekomster, så vi bruger det en del steder.

  1. ORA-4031 fejl med Direct NFS

  2. Giv valg på alle borde, der ejes af en bestemt bruger

  3. PostgreSQL matematiske funktioner

  4. Sådan konfigureres AppArmor til PostgreSQL og TimescaleDB