Sur la performance, vous continuez à vous concentrer sur la sélection.
Le partage ne bloque pas les lectures.
Mise à jour des blocs de verrouillage partagés.
Si vous avez des centaines de verrous partagés, il faudra un certain temps à une mise à jour pour obtenir un verrou exclusif, car elle doit attendre que les verrous partagés soient levés.
Par défaut, une sélection (lecture) prend un verrou partagé.
Les verrous partagés (S) permettent aux transactions concurrentes de lire (SELECT) une ressource.
Un verrou partagé n'a aucun effet sur les autres sélections (1 ou 1000).
La différence réside dans la manière dont le verrou non partagé ou le verrou partagé affecte l'opération de mise à jour ou d'insertion.
Aucune autre transaction ne peut modifier les données tant que des verrous partagés (S) existent sur la ressource.
Un verrou partagé bloque une mise à jour !
Mais nolock ne bloque pas une mise à jour.
Cela peut avoir un impact considérable sur les performances des mises à jour. Cela a également un impact sur les insertions.
La lecture sale (nolock) semble juste sale. Vous n'obtiendrez jamais de données partielles. Si une mise à jour change John en Sally, vous n'obtiendrez jamais Jolly.
J'utilise beaucoup les verrous partagés pour la concurrence. Les données sont périmées dès qu'elles sont lues. Une lecture de John qui se transforme en Sally la milliseconde suivante est une donnée périmée. Une lecture de Sally qui est retournée à John la milliseconde suivante est une donnée périmée. Cela se passe au niveau de la milliseconde. J'ai un dataloader qui prend 20 heures pour fonctionner si les utilisateurs prennent des verrous partagés et 4 heures pour fonctionner si les utilisateurs ne prennent aucun verrou. Dans ce cas, les verrous partagés font que les données sont périmées depuis 16 heures.
N'utilisez pas mal les nolocks. Mais elles ont leur place. Si vous devez effectuer un contrôle lorsqu'un octet est à 1, puis à 2 lorsque le contrôle est effectué, ce n'est pas le moment d'utiliser un nolock.