Quel est le but de ROWLOCK sur Delete et quand devrais-je l'utiliser?
Ex)
Quand doit-on utiliser cette instruction:
DELETE TOP (@count)
FROM ProductInfo WITH (ROWLOCK)
WHERE ProductId = @productId_for_del;
Et quand doit-être juste en train de faire:
DELETE TOP (@count)
FROM ProductInfo
WHERE ProductId = @productId_for_del;
source d'informationauteur RPS
Vous devez vous connecter pour publier un commentaire.
La
with (rowlock)
est un indice qui indique la base de données qu'il doit garder les verrous sur une ligne de la portée. Cela signifie que la base de données permettra d'éviter l'escalade de verrous de bloquer ou de la table de la portée.Vous utilisez l'indicateur lorsqu'un seul ou seulement quelques lignes seront affectées par la requête, pour garder de la serrure de verrouillage de lignes qui ne seront pas supprimés par la requête. Qui va laisser une requête de lecture sans rapport avec les lignes en même temps au lieu d'avoir à attendre pour que la suppression complète.
Si vous l'utilisez sur une requête qui permettra de supprimer beaucoup de lignes, il peut dégrader les performances de la base de données va essayer d'éviter l'escalade de verrous pour une plus grande portée, même si il aurait été plus efficace.
Normalement, vous ne devriez pas avoir besoin d'ajouter ces conseils à une requête, car la base de données sait quel type de serrure à utiliser. C'est seulement dans les situations où vous aurez des problèmes de performances car la base de données pris la mauvaise décision, que vous devez ajouter ces conseils à une requête.
Rowlock est un indicateur de requête qui doit être utilisé avec prudence (comme tous les indicateurs de requête).
Omettant il sera probablement toujours le même comportement et le fournit pas de garantie qu'elle ne fait qu'utiliser un verrou, il est seulement un soupçon après tout. Si vous n'avez pas une très grande connaissance de verrouillage les chances sont que l'optimiseur de choisir la meilleure possible stratégie de verrouillage, et ces choses sont habituellement préférable de laisser le moteur de base de données pour décider.
ROWLOCK signifie que SQL se verrouille uniquement la ligne, et non pas l'ensemble de la table ou de la page dans la table où sont stockées les données lors de l'exécution de la supprimer. Cela ne concerne d'autres personnes de la lecture de la table en même temps que votre suppression est en cours d'exécution.
Si un verrou de table est utilisé, il sera la cause de toutes les requêtes à la table d'attendre jusqu'à ce que votre supprimer a terminé, avec un verrou de ligne ne sélectionne que la lecture des lignes spécifiques seront fait attendre.
La suppression de haut N, où N est un nombre de lignes plus susceptibles de verrouillage de la table, en tout cas.