Principe de mise en œuvre du contrôle de concurrence de base de données

Auteur : Zen et l'art de la programmation informatique

1. Introduction

Aperçu

Le contrôle de concurrence est un composant très important dans les systèmes de gestion de bases de données relationnelles. Son rôle est de garantir que les opérations de plusieurs utilisateurs sur les mêmes données dans un environnement simultané n'entraîneront pas d'incohérence des données. Afin de garantir l'exactitude, l'intégrité et la cohérence des données, le mécanisme de contrôle de concurrence peut fournir des garanties telles que l'isolation des transactions, la durabilité des transactions et des capacités de récupération par restauration. Cet article partira des concepts de base du contrôle de concurrence, présentera des concepts tels que les transactions et les verrous, analysera en détail les principes de mise en œuvre du contrôle de concurrence de base de données, et les développera davantage en fonction de cas réels.

Préparation des connaissances

Avant de lire cet article, vous devez avoir une certaine compréhension des points de connaissances suivants :

  • Transaction
  • Concurrence
  • Verrouillage
  • Protocole de validation en deux phases
  • Planification sérialisable

2. Concept de contrôle de concurrence

Le contrôle de concurrence est un ensemble de solutions utilisées pour résoudre les problèmes de conflits de fonctionnement de base de données, notamment les conflits de lecture et d'écriture, les conflits de modification intra-transaction et les conflits d'accès au-delà des limites des transactions, etc. Le contrôle de concurrence est un sous-système indépendant dans un système de gestion de base de données relationnelle. Il est chargé de coordonner l'interaction entre plusieurs transactions exécutées simultanément afin que la base de données puisse maintenir la cohérence et l'intégrité des données lorsque plusieurs utilisateurs y accèdent en même temps.

2.1 Opérations

Une transaction est un ensemble d'une ou plusieurs instructions SQL gérées par le système de gestion de base de données dans son ensemble. Les transactions permettent de gérer une série d'opérations de base de données, notamment les opérations de lecture, d'écriture et de mise à jour des données. Les transactions doivent avoir quatre propriétés (propriétés ACID) :

  • Atomicité : Une transaction est une unité de travail indivisible dans laquelle toutes les opérations se produisent ou aucune ne se produit. Si une opération dans une transaction échoue, la transaction entière ne réussira pas et le système de base de données conservera l'état précédent sans incohérence des données.
  • Cohérence : la transaction doit être dans l'état de cohérence de la base de données, ce qui signifie que tous les résultats en cours d'exécution sont corrects, c'est-à-dire qu'une transaction doit être dans un état cohérent avant et après l'exécution.
  • Isolement : l'exécution d'une transaction ne peut pas être interférée par d'autres transactions, c'est-à-dire que les opérations au sein de la transaction et les données utilisées sont isolées des autres transactions et que les transactions exécutées simultanément ne peuvent pas interférer les unes avec les autres.
  • Durabilité : une fois qu'une transaction est validée, les modifications qu'elle apporte à la base de données doivent être enregistrées de manière permanente. Les opérations ou pannes ultérieures ne devraient avoir aucun impact sur celui-ci.

2.2 Concurrence

La concurrence fait référence à deux ou plusieurs transactions (ou commandes) exécutées au cours de la même période, elles accèdent conjointement aux mêmes ressources de données et il n'est pas nécessaire que ces transactions soient exécutées dans un ordre spécifique. Cela conduit à une incertitude des données et à une incohérence temporaire, c'est-à-dire que lorsque deux transactions ou plus opèrent sur certaines données en même temps, des résultats indéfinis peuvent être produits.

2.3 Verrouillage

Le verrouillage est un mécanisme utilisé pour empêcher l'accès simultané aux ressources de la base de données. Les verrous permettent de verrouiller et de déverrouiller des objets de base de données au début et à la fin d'une transaction. Lorsqu'une transaction demande de verrouiller une ressource, si la ressource est déjà occupée par d'autres transactions, la transaction ne peut qu'attendre ou abandonner la ressource.

2.4 Protocole de validation en deux phases

Le protocole de validation en deux phases est un modèle de transaction distribué. Ce modèle divise le processus de validation d'une transaction en deux étapes : la première étape, l'étape de préparation, lorsque la transaction demande si elle peut être exécutée. Cette étape implique le verrouillage des ressources et la vérification de l'état de la transaction ; la deuxième étape, l'étape de validation, la transaction est formellement soumise et les ressources sont libérées. S'il y a des demandes ou des verrous provenant d'autres transactions dans la première phase, la transaction en cours entre dans l'état de blocage jusqu'à ce que les verrous nécessaires soient obtenus, et enfin la transaction peut être soumise.

2.5 Planification sérialisable

La planification sérialisable est une stratégie de planification des transactions de base de données. Dans le cadre de la planification sérialisable, chaque transaction est exécutée dans l'ordre chronologique. Chaque transaction ne peut voir que les résultats validés de la transaction précédente et ne peut pas voir les résultats intermédiaires des autres transactions. Cette stratégie peut garantir la cohérence et l’intégrité des données, mais au prix de mauvaises performances.

3. Principe de mise en œuvre du contrôle de concurrence

L'objectif du contrôle de concurrence est principalement d'éviter l'incohérence des données causée par plusieurs transactions ou par des utilisateurs exploitant les mêmes données en même temps. Dans les systèmes de bases de données, le contrôle de concurrence est principalement mis en œuvre via le mécanisme de verrouillage. Le mécanisme de verrouillage garantit qu'une transaction ne peut accéder qu'à une certaine ressource à tout moment et qu'elle ne peut être utilisée par d'autres transactions qu'après que la transaction a libéré le verrou correspondant. Lorsque plusieurs transactions tentent de mettre à jour ou de lire des ressources partagées en même temps, le système de gestion de base de données utilise généralement deux méthodes pour éviter les conflits : l'une est le contrôle de concurrence basé sur le verrouillage et l'autre est le contrôle de concurrence basé sur l'horodatage.

3.1 Contrôle de concurrence basé sur le verrouillage

Le contrôle de concurrence basé sur le verrouillage est la méthode de contrôle de concurrence la plus simple. Dans cette approche, le système de gestion de base de données conserve une structure de données globale qui contient des informations sur les verrous détenus par chaque transaction. Lorsqu'une transaction souhaite verrouiller une ressource, elle vérifie d'abord si la ressource a été verrouillée par d'autres transactions. Si la ressource a été verrouillée, la transaction doit attendre que le verrou soit libéré et poursuivre l'exécution jusqu'à ce qu'elle acquière le verrou. Les verrous peuvent être des verrous exclusifs ou des verrous partagés, et différents modes de verrouillage correspondent à différentes stratégies de contrôle de concurrence.

3.1.1 Verrouillage exclusif

Les verrous exclusifs, également appelés verrous en écriture, permettent à une seule transaction d'écrire sur une certaine ressource à la fois. Lorsqu'une transaction acquiert un verrou exclusif sur une ressource, les autres transactions ne peuvent pas verrouiller la ressource jusqu'à ce que la transaction libère le verrou.

Par exemple, lorsqu'une transaction souhaite insérer un enregistrement dans une table, elle doit d'abord verrouiller la table pour empêcher les opérations d'écriture d'autres transactions de l'affecter.

L'avantage du verrouillage exclusif est sa grande efficacité, car il écrit uniquement sur la ressource verrouillée et ne provoquera donc pas d'incohérence. L’inconvénient est qu’il est facile de se retrouver dans une impasse.

3.1.2 Verrouillage partagé

Les verrous partagés, également appelés verrous de lecture, permettent à plusieurs transactions de lire une ressource en même temps, mais n'autorisent pas les opérations d'écriture. Lorsqu'une transaction acquiert un verrou partagé sur une ressource, d'autres transactions peuvent également ajouter des verrous partagés à la ressource, mais ne peuvent pas demander de verrous exclusifs.

Par exemple, lorsque deux transactions souhaitent interroger un enregistrement, elles peuvent créer des vues correspondantes dans la base de données et ajouter des verrous partagés aux vues, afin que les opérations de requête puissent être effectuées simultanément.

L’avantage des verrous partagés est d’améliorer la concurrence, de réduire les conflits de verrouillage et d’éviter les blocages. L'inconvénient est que des incohérences peuvent survenir.

3.1.3 Protocole de blocage

Les protocoles de verrouillage sont des algorithmes qui définissent comment verrouiller une ressource lors d'opérations de lecture ou d'écriture, et quand libérer le verrou. Le protocole de blocage définit deux règles, l'une est la règle de livraison bloquante et l'autre est la règle de fin de transaction.

La règle de bloc-transfert stipule que si une transaction T1 ajoute un verrou X à la ressource R, tout accès direct ou indirect à R doit suivre le même protocole de verrouillage. Par exemple, si T1 ajoute un verrou en écriture à X, tout accès à X par la transaction T2 doit suivre le protocole de verrouillage en écriture.

La règle de fin de transaction stipule que lorsqu'une transaction est terminée, elle doit libérer le verrou qu'elle détient, sinon cela entraînera un blocage ou une incohérence des données.

Le protocole de blocage peut prévenir efficacement les blocages, améliorer la concurrence et éliminer la possibilité de blocages. La mise en œuvre du protocole de blocage est relativement complexe, mais les travaux de recherche associés ont également fait de grands progrès.

3.2 Contrôle de concurrence basé sur l'horodatage

Les méthodes de contrôle de concurrence basées sur l'horodatage utilisent des horodatages pour enregistrer l'heure de début des transactions et les trier en fonction de l'heure de début de chaque transaction afin de garantir l'ordre relatif entre les transactions. Les horodatages peuvent être attribués aux transactions par le gestionnaire de transactions ou générés par le système de gestion de base de données. La méthode de contrôle de concurrence basée sur l'horodatage se caractérise par sa simplicité et son efficacité, ne nécessite pas la maintenance des informations de verrouillage et convient à la plupart des transactions, mais il existe également certains problèmes de concurrence.

3.3 Mise en œuvre d'un protocole de validation en deux phases

Le protocole de validation en deux phases est un modèle de transaction distribuée. Il divise le processus de validation d'une transaction en deux étapes : la première étape, l'étape de préparation, où la transaction demande si elle peut être exécutée. Cette étape implique le verrouillage des ressources et la vérification de l'état de la transaction ; la deuxième étape, l'étape de soumission, la transaction est formellement soumise et les ressources sont libérées. S'il y a des demandes ou des verrous provenant d'autres transactions dans la première phase, la transaction en cours entre dans l'état de blocage jusqu'à ce que les verrous nécessaires soient obtenus, et enfin la transaction peut être soumise.

Le processus de mise en œuvre du protocole de soumission en deux phases est le suivant :

  1. Le coordinateur de transaction (Coordinator) envoie des messages de préparation de transaction à tous les participants (Participants), demandant si la transaction peut être exécutée, et verrouille les ressources qui doivent être verrouillées.
  2. Si la transaction demande si elle peut être exécutée et que tous les participants répondent OUI, elle entre dans la phase de préparation.
  3. Le coordinateur de transaction envoie les informations sur l'opération de transaction à tous les participants puis entre dans la phase d'attente.
  4. Les participants libèrent le verrou après avoir terminé le travail de préparation de la transaction, puis chacun transmet les résultats de ses opérations au coordinateur de la transaction.
  5. Le coordinateur de transaction collecte les résultats de l'opération de chaque participant et détermine si la transaction remplit les conditions de soumission. Si les résultats de l'opération de tous les participants sont les mêmes, la transaction sera soumise, sinon la transaction sera annulée.
  6. Validez la transaction.

La clé du protocole de validation en deux phases est de savoir comment déterminer si les participants sont prêts à valider la transaction, c'est-à-dire s'ils ont libéré tous les verrous. Si un ou plusieurs participants n'ont pas débloqué le verrou, la transaction est considérée comme bloquée et passe en état d'attente. Le protocole de validation en deux phases résout le problème de surcharge des transactions longues car il minimise le temps de verrouillage des ressources, mais il existe toujours un risque de perte partielle.

3.4 Implémentation de la planification sérialisable

La planification sérialisable est une stratégie de planification des transactions de base de données. Dans le cadre de la planification sérialisable, chaque transaction est exécutée dans l'ordre chronologique. Chaque transaction ne peut voir que les résultats validés de la transaction précédente et ne peut pas voir les résultats intermédiaires des autres transactions. Cette stratégie peut garantir la cohérence et l’intégrité des données, mais au prix de mauvaises performances.

Il existe deux manières de mettre en œuvre la planification sérialisable : la planification sérialisable basée sur des règles et la planification sérialisable basée sur des anti-normes. L'idée de base de la planification sérialisable basée sur des règles est de planifier selon une certaine stratégie de planification pendant le processus de planification pour garantir que l'exécution des transactions est conforme à une séquence. La planification sérialisable basée sur des anti-standards contraint la séquence d'exécution des transactions en introduisant des spécifications.

4. Exemple de contrôle de concurrence

Prenons l'exemple du solde du compte bancaire pour analyser deux méthodes de contrôle de concurrence : basée sur le verrouillage et basée sur l'horodatage.

Supposons qu'il existe un tableau bank_accountqui enregistre le solde du compte bancaire et le montant disponible de chaque client. account_id=1Supposons qu'il y ait deux transactions A et B, qui opèrent toutes deux sur le même compte : la transaction A doit account_id=1augmenter le solde disponible du compte de 100 yuans, et la transaction B doit account_id=1réduire le solde disponible du compte de 50 yuans.

4.1 Approche basée sur le verrouillage

La méthode basée sur le verrouillage consiste à account_id=1verrouiller d'abord le compte, puis à déterminer quelles transactions doivent account_id=1verrouiller le compte, quelles ressources sont verrouillées et à demander un verrouillage au service de verrouillage. Le service de verrouillage renvoie un verrou pouvant être utilisé. Si deux transactions doivent account_id=1verrouiller le compte, les types de verrous obtenus sont différents : A obtient un verrou exclusif et B obtient un verrou partagé. Si une transaction doit account_id=1verrouiller un compte et que le service de verrouillage ne peut pas répondre à la demande, la transaction ne peut qu'attendre ou abandonner la ressource.

Grâce au service de verrouillage, le système de base de données garantit que deux transactions n'opéreront pas account_id=1sur le même compte en même temps, évitant ainsi le problème d'incohérence des données.

4.2 Méthode basée sur l'horodatage

La méthode basée sur l'horodatage attribue un horodatage de début à chaque transaction et trie en fonction de l'horodatage de début de chaque transaction. Étant donné que le système de base de données trie toujours les transactions en fonction des horodatages petits à grands, toutes les transactions au cours de la même période peuvent être exécutées dans un ordre relatif, garantissant ainsi l'ordre relatif entre les transactions.

account_id=1Les heures de début des deux transactions étant différentes, les opérations sur un même compte ne peuvent pas être effectuées simultanément entre elles . Cependant, la méthode basée sur l’horodatage peut également garantir la cohérence et l’intégrité des données, mais le mécanisme de verrouillage ne le peut pas.

Je suppose que tu aimes

Origine blog.csdn.net/universsky2015/article/details/133446442
conseillé
Classement