Maison >base de données >tutoriel mysql >Utilisation de verrous pour le contrôle de concurrence dans le SGBD

Utilisation de verrous pour le contrôle de concurrence dans le SGBD

王林
王林avant
2023-09-02 13:57:02909parcourir

在 DBMS 中使用锁进行并发控制

Les verrous font partie intégrante du maintien du contrôle de concurrence dans un SGBD. Les transactions dans tout système qui implémente un contrôle de concurrence basé sur les verrous ne peuvent pas lire ou écrire des instructions tant qu'elles n'ont pas acquis les verrous requis.

Il existe deux types de verrous dans les protocoles basés sur le verrouillage. Ce sont :

  • Verrous binaires - Ils ne peuvent être que dans l'un des deux états suivants, verrouillés ou déverrouillés.
  • Verrous partagés/exclusifs - Acquérir des verrous partagés uniquement lors de l'exécution d'opérations de lecture. Les verrous partagés peuvent être partagés entre plusieurs transactions car aucune donnée n'est modifiée. Utilisez un verrou exclusif lors de l'exécution d'opérations d'écriture. Seules les transactions détenant un verrou exclusif sont autorisées à modifier les valeurs des données.

Les différents protocoles de verrouillage sont -

Protocole de verrouillage simple

Une transaction acquiert un verrou sur une valeur de donnée avant d'effectuer une opération d'écriture. Une fois l'opération d'écriture terminée, le verrou peut être libéré. Un exemple de protocole de verrouillage simple est :

T1 T2
R(A)

R(A)
Verrouillage( B )

R(B)

W(B)

Déverrouiller(B)

Verrouiller (C)

R (C)

W(C)

Déverrouiller (C)
Envoyer

Commit

Deux transactions T1 et T2 sont présentées ci-dessus. Les opérations de lecture ne nécessitent pas de verrous, mais chaque transaction acquiert un verrou avant une opération d'écriture et libère le verrou par la suite.

Protocole de verrouillage en deux phases

Le protocole de verrouillage en deux phases comporte deux phases, à savoir la phase de croissance et la phase de contraction. Une transaction ne peut acquérir des verrous que pendant la phase de croissance. Lorsqu’il entre dans la phase de réduction, il peut libérer les verrous précédemment acquis, mais ne peut pas en acquérir de nouveaux. Les verrous exclusifs sont représentés par X et les verrous partagés sont représentés par S. Un exemple de protocole de verrouillage en deux phases est -

tr>Déverrouiller (C)Déverrouiller (A)Déverrouiller (B)Déverrouiller (A)EnvoyerCommitProtocole de verrouillage strict en deux phasesT1T2S(A)R(A)
T1 T2
S(A)

R(A)

S(A)

R(A)
W(B)

Dans l'exemple ci-dessus, T1 et T2 partagent le verrou en utilisant la variable partagée A car seules les opérations de lecture sont effectuées sur A. T1 acquiert le verrou exclusif sur B pour l'opération d'écriture et le libère peu de temps après. T2 fait la même chose que C.

Le protocole de verrouillage strict en deux phases est similaire au protocole de verrouillage en deux phases. La seule différence est que dans un protocole 2PL strict, tous les verrous exclusifs acquis par le protocole doivent être conservés jusqu'à ce que le protocole soit validé ou abandonné. Un exemple de protocole de confinement strict en deux étapes est :

S(A) tr>R(A)W B Déverrouiller (B)EnvoyerDéverrouiller(C)
X(B)

R(B)

Envoyer

Dans l'exemple ci-dessus, T1 et T2 partagent la variable A en utilisant un verrou partagé, car seules les opérations de lecture sont effectuées sur A. T1 acquiert un verrou exclusif sur B pour les opérations d'écriture et T2 acquiert un verrou exclusif sur C. Le verrou exclusif n'est libéré qu'après la validation de la transaction. Cependant, les verrous partagés ne sont pas soumis à de telles restrictions.

Protocole de verrouillage strict à deux phases

Le protocole de verrouillage strict à deux phases n'est qu'une extension du protocole de verrouillage à deux phases et du protocole de verrouillage strict à deux phases. Protocole de verrouillage. Ici, tous les verrous détenus par une transaction, qu'ils soient partagés ou exclusifs, ne sont libérés que lorsque la transaction est validée ou abandonnée. Un exemple de protocole de confinement strict en deux étapes est :

tr>W(B)W(C) SoumettreDéverrouiller(A)Déverrouiller(B) Envoyer Unlock (A)Unlock(C)Dans l'exemple ci-dessus, T1 et T2 utilisent un verrou partagé pour partager la variable A car seules les opérations de lecture sont effectuées sur A. T1 acquiert un Verrouillage exclusif sur B pour les opérations d'écriture et T2 sur C Faire la même chose sur . Les verrous partagés et exclusifs ne seront libérés qu’une fois la transaction validée.
T1 T2
S(A)

R(A)

S(A)

R(A)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer