Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 19946|Répondre: 3

[Source] Verrouillages de base de données NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Copié le lien]
Publié sur 14/01/2021 15:23:14 | | | |
NONLOCK
Lorsque cette option est sélectionnée, SQL Server lit ou modifie les données sans aucun verrouillage. Dans ce cas, l’utilisateur peut lire des données provenant d’une transaction non engagée ou d’un retour en arrière, appelé « données sales ».

VERROUILLAGE DE MAINTIEN
Lorsque cette option est sélectionnée, SQL Server maintient ce verrou partagé jusqu’à la fin de toute la transaction sans le relâcher en chemin.

MISE À JOUR
Lorsque cette option est sélectionnée, SQL Server utilise un verrou de modification au lieu d’un verrou partagé lors de la lecture des données et maintient ce verrou jusqu’à la fin de toute la transaction ou de la commande. Cette option garantit que plusieurs processus peuvent lire les données simultanément, mais que seul ce processus peut modifier les données.

TABLOCK
Lorsque cette option est sélectionnée, SQL Server place un verrou partagé sur toute la table jusqu’à la fin de la commande. Cette option garantit que les autres processus ne peuvent que lire les données et ne pas les modifier.

PAGLOCK
Cette option est l’option par défaut, et une fois sélectionnée, SQL Server utilise un verrou de page partagé.

TABLOCKX (Verrouillage exclusif de table)
Lorsque cette option est sélectionnée, SQL Server place un verrou sur toute la table jusqu’à la fin de la commande ou de la transaction. Cela empêchera d’autres processus de lire ou de modifier les données dans le tableau.

HOLDLOCK conserve le verrou partagé jusqu’à la fin de la transaction complète et doit être libéré dès que l’objet verrouillé n’est plus nécessaire, soit le niveau d’isolation de la transaction SÉRIALISABLE

L’instruction NOLOCK est exécutée sans émettre de verrou partagé, permettant des lectures sale, qui correspondent au niveau d’isolation de la transaction READ UNCOMMITTED

PAGLOCK utilise plusieurs verrous de page où un seul verrou de table est utilisé

READPAST permet au serveur SQL de sauter toutes les lignes verrouillées et d’exécuter des transactions, et pour les niveaux d’isolement des transactions READ NON engagés, ne sauter que les verrous RID, pas les verrous de page, de zone et de table

ROWLOCK impose l’utilisation des rowlocks

TABLOCKX impose l’utilisation d’un verrou exclusif au niveau de la table, qui empêche toute autre transaction d’utiliser la table pendant la transaction

UPLOCK impose l’utilisation de mises à jour lors de la lecture d’une table sans verrou partagé

Note : La différence entre verrouiller une table dans une base de données
SELECT * FROM table WITH (HOLDLOCK) D’autres transactions peuvent lire la table, mais ne peuvent ni être mises à jour ni supprimées
SELECT * FROM table WITH (TABLOCKX) Les autres transactions ne peuvent pas lire, mettre à jour et supprimer les tables




Précédent:Affichage à double écran du bureau à distance Win10
Prochain:.NET/C# Créer un compte portefeuille ETH et un mot de passe de vérification basé sur Nethereum [avec code source]
 Propriétaire| Publié sur 14/01/2021 16:53:24 |
Tester le verrou TABLOCKX

Le SQL de test est le suivant :


Test du code C# :


Découverte,L’ensemble de la table est verrouillé, et les données ne peuvent être interrogées que lorsque la transaction est exécutée, comme montré dans la figure ci-dessous :



Supprimez WITH(TABLOCKX) et ne mettez à jour que les données avec ID 1, le test est le suivant :



Comme les tâches 2 et 4 n’impliquent pas de données avec id 1, la requête est très rapide, et les tâches 3 et 4 doivent attendre que la transaction soit terminée avant de requête.

Comportement lors de la modification des données

Dans une transaction de lecture engagée utilisant le versionnement des lignes, sélectionnez les lignes à mettre à jour en utilisant un balayage de blocage, où un verrou de mise à jour (U-lock) est appliqué à la ligne de données lors de la lecture de la valeur des données. C’est la même chose qu’une transaction de lecture engagée qui n’utilise pas le versionnement de ligne. Si une ligne de données ne répond pas aux critères de mise à jour, un verrou de mise à jour est libéré sur cette ligne et la ligne suivante est verrouillée et analysée.

Verrouillage de mise à jour (U) : Un mode de verrouillage qui empêche les blocages, où deux transactions lisent d’abord une ressource de données En cas de modification, l’utilisation de verrous partagés et exclusifs provoque parfois des blocages, tandis que l’utilisation de verrous de mise à jour peut éviter la survenue de blocages. Le verrou de mise à jour de la ressource ne peut être attribué qu’à une seule transaction à la fois, et si la ressource doit être modifiée, le verrou de mise à jour devient un verrou exclusif, sinon il devient un verrou partagé.

La connexion hyperlientérée est visible.

 Propriétaire| Publié sur 28/01/2021 17:30:51 |
Émettre:

udpate a
colonne d’ensemble1 = 1
où idx = 1
Lorsque sqlserver exécute l’instruction update, il verrouille toute la table

Analyse :

structure de montre,Sans clé primaire, vous ne pouvez pas verrouiller uniquement les rangées
 Propriétaire| Publié sur 02/05/2023 11:47:24 |
Optimisation des requêtes du Entity Framework AVEC(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com