Article de reference

Verrouillage de l'enregistrement

Le verrouillage d'enregistrements est une technique permettant d'empêcher l'accès simultané aux données d'une base de données , afin d'éviter des résultats incohérents. L'exempl...

Le verrouillage d'enregistrements est une technique permettant d'empêcher l'accès simultané aux données d'une base de données , afin d'éviter des résultats incohérents.

L'exemple classique est celui de deux employés de banque qui tentent de mettre à jour le même compte bancaire pour deux transactions différentes. Les employés 1 et 2 récupèrent (c'est-à-dire copient) l' enregistrement du compte . L'employé 1 effectue et enregistre une transaction. L'employé 2 effectue une autre transaction sur sa copie enregistrée et enregistre le résultat, basé sur l'enregistrement original et ses modifications, écrasant ainsi la transaction saisie par l'employé 1. L'enregistrement ne reflète plus la première transaction, comme si elle n'avait jamais eu lieu.

Pour éviter cela, il suffit de verrouiller le fichier dès qu'un enregistrement est modifié par un utilisateur, empêchant ainsi tout autre utilisateur d'enregistrer des données. Cela empêche l'écrasement accidentel des enregistrements, mais limite le traitement à un seul enregistrement à la fois, bloquant l'accès aux autres utilisateurs qui doivent modifier des enregistrements simultanément.

Pour permettre à plusieurs utilisateurs de modifier simultanément une table de base de données et éviter les incohérences dues à un accès non restreint, un enregistrement peut être verrouillé lors de sa récupération pour modification ou mise à jour. Toute personne tentant de récupérer ce même enregistrement pour modification se voit refuser l'accès en écriture en raison du verrouillage (bien que, selon l'implémentation, elle puisse éventuellement consulter l'enregistrement sans le modifier). Une fois l'enregistrement enregistré ou les modifications annulées, le verrou est levé. Les enregistrements ne peuvent jamais écraser les modifications précédentes, préservant ainsi l'intégrité des données .

En théorie de la gestion des bases de données, le verrouillage est utilisé pour implémenter l'isolation entre plusieurs utilisateurs de la base de données. C'est le « I » de l'acronyme ACID .

Jim Gray a écrit une description complète et faisant autorité du verrouillage .

Granularité des serrures

If the bank clerks (to follow the illustration above) are serving two customers, but their accounts are contained in one ledger, then the entire ledger, or one or more database tables, would need to be made available for editing to the clerks in order for each to complete a transaction, one at a time (file locking). While safe, this method can cause unnecessary waiting.

If the clerks can remove one page from the ledger, containing the account of the current customer (plus several other accounts), then multiple customers can be serviced concurrently, provided that each customer's account is found on a different page than the others. If two customers have accounts on the same page, then only one may be serviced at a time. This is analogous to a page-level lock in a database.

A higher degree of granularity is achieved if each individual account may be taken by a clerk. This would allow any customer to be serviced without waiting for another customer who is accessing a different account. This is analogous to a record-level lock and is normally the highest degree of locking granularity in a database management system.

In a SQL database, a record is typically called a "row".

The introduction of granular (subset) locks creates the possibility for a situation called deadlock. Deadlock is possible when incremental locking (locking one entity, then locking one or more additional entities) is used. To illustrate, if two bank customers asked two clerks to obtain their account information so they could transfer some money into other accounts, the two accounts would essentially be locked. Then, if the customers told their clerks that the money was to be transferred into each other's accounts, the clerks would search for the other accounts but find them to be "in use" and wait for them to be returned. Unknowingly, the two clerks are waiting for each other, and neither of them can complete their transaction until the other gives up and returns the account. Various techniques are used to avoid such problems.

Use of locks

Record locks need to be managed between the entities requesting the records such that no entity is given too much service via successive grants, and no other entity is effectively locked out. The entities that request a lock can be either individual applications (programs) or an entire processor.

The application or system should be designed such that any lock is held for the shortest time possible. Data reading, without editing facilities, does not require a lock, and reading locked records is usually permissible.

Two main types of locks can be requested:

Exclusive locks

Les verrous exclusifs sont détenus exclusivement par une seule entité, généralement pour écrire dans l'enregistrement. Si le schéma de verrouillage était représenté par une liste, la liste des détenteurs ne contiendrait qu'une seule entrée. Étant donné que ce type de verrou bloque de fait toute autre entité nécessitant ce verrou, il convient d'être vigilant afin de :

  • veiller à ce que le verrou soit maintenu pendant la durée la plus courte possible ;
  • ne pas maintenir le verrou pendant les appels système ou de fonction lorsque l'entité ne s'exécute plus sur le processeur – cela peut conduire à un blocage ;
  • S'assurer que si l'entité est quittée de manière inattendue pour quelque raison que ce soit, le verrou est libéré.

Les entités ne détenant pas le verrou (également appelées « en attente » ) peuvent être placées dans une liste traitée selon un principe de ronde ou dans une file d'attente FIFO . Ceci garantit à chaque entité en attente une chance égale d'obtenir le verrou et d'éviter d'être bloquée. Pour accélérer encore le processus, si une entité est en veille en attente d'un verrou, les performances sont améliorées si elle est notifiée de l'octroi du verrou, plutôt que de le découvrir lors d'un réveil automatique déclenché par un délai d'expiration du système.

Serrures partagées

Les verrous partagés se distinguent des verrous exclusifs par le fait que la liste des détenteurs peut contenir plusieurs entrées. Les verrous partagés permettent à tous les détenteurs de lire le contenu de l'enregistrement, sachant que celui-ci ne peut être modifié tant que le verrou n'a pas été levé par tous les détenteurs. Il est impossible d'obtenir un verrou exclusif lorsqu'un enregistrement est déjà verrouillé (exclusivement ou de manière partagée) par une autre entité.

Si plusieurs demandes de verrouillage concernant une même entité sont mises en file d'attente, l'octroi d'un verrou partagé entraîne celui de tous les verrous partagés en attente. Si un verrou exclusif est ensuite trouvé dans la file d'attente, il doit attendre la libération de tous les verrous partagés. Comme pour les verrous exclusifs, la durée de détention de ces verrous partagés doit être minimale.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index