219
7.3 Niveaux d’isolation de la transaction
opposées. Plus la cohérence est garantie, plus le nombre possible d’accès concurrents
est faible, et vice-versa. Cela a donc fort un impact sur les performances. Afin de
contrôler cet équilibre, nous pouvons agir sur l’isolation, en modifiant le niveau
d’isolation de la transaction, dans le contexte de la session, ou par table requêtée.
La norme SQL définit quatre niveaux d’isolation, qui répondent à quatre problématiques connues de la cohérence transactionnelle : les mises à jour perdues, les lectures sales, les lectures non renouvelables, et les lectures fantômes.
La mise à jour perdue (lost update) se produit lorsque deux transactions lisent
puis modifient simultanément les mêmes données (les mêmes lignes) à partir de
cette lecture. La dernière mise à jour étant celle qui est prise en compte, des modifications appliquées par les transactions précédentes peuvent être écrasées.
La lecture sale (dirty read) décrit le cas où une ligne est lue alors qu’elle est en
cours de modification par une autre transaction, soit parce que l’instruction est en
cours d’exécution, soit parce que la transaction qui a modifié la ligne n’est pas
encore validée (ce qui selon le principe de l’atomicité de la transaction est strictement équivalent). Le risque encouru est donc d’obtenir des informations incomplètes ou non valides.
La lecture non renouvelable (non-repeatable read) indique la possibilité, pour une
transaction, de trouver des valeurs différentes dans les lignes lues à deux moments de
la transaction, parce qu’une autre transaction aura modifié les données entre les
deux lectures. C’est un danger pour les transactions qui comptent sur la cohérence
de ces données dans la durée de vie de la transaction pour leur traitement.
La lecture fantôme (phantom read) est forme aggravée de la lecture non répétable. Elle décrit l’apparition de nouvelles lignes lors de nouvelles lectures, lorsque
dans la même transaction, un deuxième SELECT portant sur les mêmes lignes (la
même clause WHERE), voit apparaître de nouvelles lignes, parce qu’une autre transaction aura inséré des données répondant à la clause de filtre.
Répondre à ces différents problèmes implique, pour une transaction, de choisir
différentes stratégies de verrouillage. Ces stratégies sont dictées par le niveau d’isolation de la transaction. La norme SQL décrit quatre niveaux d’isolation, qui répondent chacun à un problème transactionnel. Ce sont, dans l’ordre croissant de
cohérence :
• READ UNCOMMITTED ;
• READ COMMITTED ;
• REPEATABLE READ ;
• SERIALIZABLE.
SQL Server, à partir de la version 2005, ajoute un niveau d’isolation propriétaire, basé
sur le row versioning, appelé SNAPSHOT.
Précédent

- 231/334

Suivant