READ CONSISTENCY
Si cette option est spécifiée, la transaction en mode d’isolation READ COMMITED
prend un instantané persistant de la base de données pour la durée de l’instruction. Chaque nouvelle instruction de niveau supérieur crée son propre instantané de la base de données pour voir les dernières données validées. Les instructions imbriquées (triggers, procédures et fonctions stockées imbriquées, instructions dynamiques, etc.) utilisent le même instantané de la base de données que celui créé par l’instruction de niveau supérieur.
Dans l’API Firebird, la constante isc_tpb_read_consistency
correspond à l’opérateur READ CONSISTENCY
pour un instantané cohérent au niveau SQL.
Gestion des conflits de mise à jour
Lorsqu’une instruction est exécutée dans une transaction en mode d’isolation READ COMMITTED READ CONSISTENCY
, la vue de la base de données est inchangée (similaire à une transaction SNAPSHOT
). Le comportement de lecture est similaire à celui de la transaction READ COMMITTED RECORD_VERSION
— l’opérateur n’attend pas que la transaction active soit terminée et parcourt la chaîne arrière, qui recherche la version de l’enregistrement visible dans le snapshot courant.
Pour le mode d’isolation READ COMMITTED READ CONSISTENCY
, la gestion des conflits de mise à jour de Firebird est considérablement modifiée. Lorsqu’un conflit de mise à jour est détecté, la procédure suivante est effectuée :
-
le mode d’isolation de la transaction est temporairement commuté sur
READ COMMITTED NO RECORD VERSION
; -
Firebird pose un verrou sur l’enregistrement en conflit ;
-
Firebird continue à évaluer les enregistrements restants pour les supprimer/mettre à jour dans le curseur, et continue à poser des verrous sur eux ;
-
lorsqu’il n’y a plus d’enregistrements à extraire, un mécanisme est déclenché pour annuler toutes les actions effectuées par l’opérateur de niveau supérieur, et tous les verrous posés pour chaque enregistrement mis à jour/supprimé/bloqué sont conservés, tous les enregistrements insérés sont supprimés ;
-
alors Firebird restaure le mode d’isolation de la transaction en tant que
READ COMMITTED READ CONSISTENCY
, crée un nouvel instantané de niveau opérateur et relance l’exécution de l’instruction de niveau supérieur.
Cet algorithme garantit que, après le redémarrage, les enregistrements déjà mis à jour restent verrouillés, qu’ils sont visibles pour le nouvel instantané et qu’ils peuvent être mis à jour à nouveau sans autre conflit.De plus, grâce au mode de cohérence de lecture, l’ensemble des enregistrements modifiés reste cohérent.
Note
|
Remarques
|