- Lectures salissantes lecture de données non autorisées provenant d'une autre transaction
- Lectures non répétables : lecture de données COMMITTED à partir d'un
UPDATE
requête provenant d'une autre transaction
- Le fantôme lit : lecture de données COMMITTED à partir d'un
INSERT
o DELETE
requête provenant d'une autre transaction
Nota : Les déclarations DELETE d'une autre transaction ont également une très faible probabilité de provoquer des lectures non répétables dans certains cas. Cela se produit lorsque l'instruction DELETE supprime malheureusement la même ligne que celle que la transaction en cours interrogeait. Mais il s'agit d'un cas rare, qui a beaucoup moins de chances de se produire dans une base de données dont chaque table contient des millions de lignes. Les tables contenant des données de transaction ont généralement un volume de données élevé dans un environnement de production.
Nous pouvons également observer que, dans la plupart des cas d'utilisation, les mises à jour sont plus fréquentes que les insertions ou les suppressions (dans ce cas, le danger de l'utilisation de lectures non répétables restent seulement - Le fantôme lit ne sont pas possibles dans ces cas-là). C'est pourquoi les mises à jour sont traitées différemment des insertions et suppressions, et l'anomalie qui en résulte est également nommée différemment.
Il y a également un coût de traitement supplémentaire associé à la gestion des INSERT-DELETE, au lieu de la simple gestion des UPDATES.
- READ_UNCOMMITTED n'empêche rien. C'est l'isolement zéro niveau d'isolement
- READ_COMMITTED n'en empêche qu'une seule, c'est-à-dire que Dirty lit
- REPEATABLE_READ permet d'éviter deux anomalies : Les lectures sales et les les lectures non répétables
- SERIALIZABLE permet d'éviter ces trois anomalies : Les lectures parasites, les lectures non répétables et les lectures fantômes.
Dans ce cas, pourquoi ne pas simplement définir la transaction SERIALISABLE à tout moment ? La réponse à la question précédente est la suivante : le paramètre SERIALIZABLE rend les transactions très difficiles à gérer. lent ce que nous ne voulons pas non plus.
En fait, la consommation de temps de transaction se fait au rythme suivant :
SERIALISABLE > LECTURE_RÉPÉTABLE > READ_COMMITTED > READ_UNCOMMITTED
Le paramètre READ_UNCOMMITTED est donc le paramètre le plus rapide .
Résumé
En fait, nous devons analyser le cas d'utilisation et décider d'une niveau d'isolement afin d'optimiser le temps de transaction et de prévenir la plupart des anomalies.
Notez que les bases de données peuvent avoir un paramètre REPEATABLE_READ par défaut. Les administrateurs et les architectes peuvent avoir une affinité pour choisir ce paramètre par défaut, afin d'améliorer les performances de la plateforme.