Sobes.tech
Middle+

Quelles anomalies peuvent survenir lors de l'exécution de transactions parallèles?

sobes.tech IA

Réponse de l'IA

Lors de l'exécution parallèle de transactions, les anomalies suivantes peuvent survenir:

  1. Mise à jour perdue (Lost Update): Une transaction écrase les changements d'une autre transaction avant que ces changements soient validés.

    Temps Transaction 1 Transaction 2
    t1 Lit la valeur du solde (par exemple, 100)
    t2 Lit la valeur du solde (par exemple, 100)
    t3 Augmente le solde de 10 (Solde = 110)
    t4 Augmente le solde de 20 (Solde = 120)
    t5 Confirme les changements (Solde devient 110)
    t6 Confirme les changements (Solde devient 120)

    Résultat: Malgré deux augmentations, la valeur finale du solde est 120, pas 130. La mise à jour de la Transaction 1 est perdue.

  2. Lecture sale (Dirty Read): Une transaction lit des changements non validés d'une autre transaction. Si la transaction qui a effectué les changements est annulée, les données lues seront invalides.

    Temps Transaction 1 Transaction 2
    t1 Commence à changer le solde (100 -> 110)
    t2 Lit le solde (obtient 110)
    t3 Annule le changement (le solde revient à 100)
    t4 Utilise le solde = 110 dans les calculs, alors que la valeur réelle est 100

    Résultat: La Transaction 2 base ses actions sur des données qui, en fin de compte, n'ont pas été validées.

  3. Lecture non répétable (Non-Repeatable Read): Pendant une même transaction, la lecture répétée de la même ligne donne des valeurs différentes parce qu'une autre transaction a validé des changements dans cette ligne entre-temps.

    Temps Transaction 1 Transaction 2
    t1 Lit le solde (obtient 100)
    t2 Change le solde à 110 et valide
    t3 Lit à nouveau le solde (obtient 110 au lieu de 100 attendu)

    Résultat: Le solde a changé dans la même transaction, ce qui peut conduire à des résultats incorrects.

  4. Lecture fantôme (Phantom Read): Semblable à la lecture non répétable, mais concerne l'ajout ou la suppression de lignes qui affectent les résultats d'une requête avec un prédicat.

    Temps Transaction 1 Transaction 2
    t1 Exécute la requête SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (obtient 5)
    t2 Ajoute une nouvelle commande avec le statut 'Pending' et valide
    t3 Exécute à nouveau SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (obtient 6)

    Résultat: Lors de la réexécution de la requête, des lignes "fantômes" apparaissent, qui n'étaient pas présentes lors de la première lecture.

Ces anomalies sont évitées en utilisant différents niveaux d'isolation des transactions.