117 votes

WITH (NOLOCK) vs SET NIVEAU D'ISOLATION DE TRANSACTION LIRE NON COMMANDÉ

Quelqu'un pourrait-il me donner quelques conseils sur quand je dois utiliser par opposition à

Quels sont les avantages/inconvénients de chacun ? Y a-t-il des conséquences inattendues que vous avez exécuté en utilisant l’un contre l’autre ?

102voto

HLGEM Points 54641

Ils sont la même chose. Si vous utilisez le instruction, il s’appliquera à toutes les tables de la connexion, donc si vous voulez seulement un sur une ou deux tables utiliser ; sinon utilisez l’autre.

Tous les deux vous donnera les lectures incorrectes. Si vous êtes OK avec ça, puis utilisez-les. Si vous ne pouvez pas avoir des lectures incorrectes, alors pensez à ou fait allusion à la place.

25voto

Anon246 Points 1351

AVEC (NOLOCK) est un indice sur une table. Réglage du niveau d'isolation de transaction à READ_UNCOMMITTED avec incidence sur la connexion. La différence est au niveau de sa portée. Voir READUNCOMMITTED et NOLOCK dans la documentation de SQL Server ici:

http://technet.microsoft.com/en-us/library/ms187373.aspx

Pour le NIVEAU d'ISOLATION de TRANSACTION: http://technet.microsoft.com/en-us/library/ms173763.aspx

10voto

gbn Points 197263
  • NOLOCK est local à la table (ou de points de vue, etc)
  • READ UNCOMMITTED est par session/connexion

Comme pour les lignes directrices... une recherche aléatoire de StackOverflow et électrique interweb...

9voto

Sean Copenhaver Points 2070

À ma connaissance, la seule différence est la portée de ces effets Strommy dit. NOLOCK information sur une table et du READ sur la session.

Comme pour les problèmes qui peuvent survenir, il est tout au sujet de la cohérence. Si vous vous souciez alors être conscient que vous pourriez obtenir ce qu'on appelle des lectures incorrectes qui pourraient influencer les autres données manipulées sur des informations inexactes.

Personnellement, je ne pense pas que j'ai vu tous les problèmes de ce mais qui peut être plus en raison de la façon dont j'utilise nolock. Vous devez être conscient qu'il existe des scénarios où il sera OK pour l'utiliser. Les scénarios où vous êtes surtout l'ajout de nouvelles données à une table mais un autre processus qui vient derrière pour vérifier un scénario de données. Qui sera probablement OK, puisque le flux principal n'est pas le retour et mise à jour des lignes au cours d'une lecture.

Aussi je crois que ces jours, vous devriez regarder en version Multi-Contrôle de la Simultanéité. Je crois qu'ils ajouté en 2005 et il aide à arrêter les auteurs de bloquer les lecteurs en donnant aux lecteurs un aperçu de la base de données à utiliser. Je vais inclure un lien et de laisser davantage de recherches pour le lecteur:

MVCC

Base De Données Des Niveaux D'Isolement

6voto

Rez.Net Points 196

Vous ne pouvez pas utiliser Set Transaction Isolation Level Read Uncommitted dans une vue (vous ne pouvez avoir un seul script là-dedans en fait), donc vous devriez avoir à utiliser (nolock) si sales rangées devraient être incluses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X