IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

mode serializable et read commited


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 153
    Points : 47
    Points
    47
    Par défaut mode serializable et read commited
    Bonjour en fait , j ai vu pas mal de tp ; mais je suis encore bloquee au niveau des modes serializable et read committed , je vois pas trop la difference , j ai lu pas mal de cours aussi mais sans resultat , :s
    y a t il quelqu un qui peut meclaircir un ptit peu les choses???
    merci d avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    4 niveaux d'isolation dans la norme SQL :
    Si je fais les requêtes suivantes ( étant une variable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1) SELECT :x = SUM(MaColonne) FROM MaTable
    2) SELECT :x = :x - SUM(MaColonne) FROM MaTable
    Le résultat de doit être 0.
    Êtes vous d'accord ?

    Voyons voir ce qui se passe lorsqu'il y a concurrence de deux transactions :

    1) READ UNCOMMITED
    scénario (T1 et T2 sont deux transactions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     T1:BEGIN TRANSACTION
       T2: BEGIN TRANSACTION
     T1:SELECT :x = SUM(MaColonne) FROM MaTable
       T2:UPDATE MaTable SET MaColonne = MaColonne + 10
     T1:SELECT :x = :x - SUM(MaColonne) FROM MaTable
       T2:ROLLABCK TRANSACTION
     T1:COMMIT TRANSACTION
    Que contient la variable ?
    La transaction 1 à lut des lignes non validées. On parle de lectures "impropres" ou lectures sales (dirty read)...
    Pour éviter cela il faut passer au niveau d'isolation READ COMMITTED qui prévoir que seule les transactions validées (COMMIT) sont considérées.
    Cela résoud t-il tous les problèmes ?

    2) READ COMMITED
    scénario (T1 et T2 sont deux transactions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     T1:BEGIN TRANSACTION
       T2: BEGIN TRANSACTION
     T1:SELECT :x = SUM(MaColonne) FROM MaTable
       T2:UPDATE MaTable SET MaColonne = 77
     T1:SELECT :x = :x - SUM(MaColonne) FROM MaTable
       T2:COMMIT TRANSACTION
     T1:COMMIT TRANSACTION
    Que contient la variable ?
    La transaction 1 à lut des lignes validées mais ayant évoluées entre temps. On parle de lectures non répétables (je préfère d'ailleurs non répétitibles).
    Pour éviter cela il faut passer au niveau d'isolation REPEATABLE READ qui impose que les lignes lues dans une transaction ne doivent plus êtres modifiées jusqu'à la fin de la transaction.
    Cela résoud t-il tous les problèmes ?

    3) REPEATABLE READ
    scénario (T1 et T2 sont deux transactions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     T1:BEGIN TRANSACTION
       T2: BEGIN TRANSACTION
     T1:SELECT :x = SUM(MaColonne) FROM MaTable
       T2:INSERT INTO MaTable (MaColonne) VALUES (99)
     T1:SELECT :x = :x - SUM(MaColonne) FROM MaTable
       T2:COMMIT TRANSACTION
     T1:COMMIT TRANSACTION
    Que contient la variable ?
    La transaction 1 à lut des lignes qui n'ont pas été modifiées entre les deux requêtes. Cepandant une nouvelle ligne est apparue. Elle n'a pas pu être bloquée puisqu'elle n'existait pas à l'origine. On parle alors de lectures fantômes.
    Pour éviter cela il faut passer au niveau d'isolation SERIALIZABLE qui impose que les tables concernées par une transaction doivent être inaccessible aux autres transactions (exclusivité d'usage de la table).

    Cela résoud tous les problèmes ?... Mais au prix d'un blocage très contraignant...

    Lisez un de mes livres sur SQL pour comprendre ce genre de phénomènes..

    A +

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 153
    Points : 47
    Points
    47
    Par défaut
    Merci pour votre reponse , je voudrai aussi savoir sil existe un site avec des tp et leur corrigés , comme ca je saurai si j ai bien saisi ou non
    merci encore c'est gentil

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 153
    Points : 47
    Points
    47
    Par défaut
    coucou help svp

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    fouillez le net avec google !

    A +

Discussions similaires

  1. Niveau d'isolation serializable et read committed
    Par najwalamdin dans le forum Débuter
    Réponses: 3
    Dernier message: 19/04/2013, 17h03
  2. Degré d'isolation Read committed
    Par alex2746 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/05/2010, 17h59
  3. Snapshot ou read commited
    Par badilou dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2008, 11h14
  4. Snapshot ou read commited
    Par badilou dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/05/2008, 14h13
  5. read committed, serializable... et par défaut k'en est-il?
    Par superdada dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/12/2003, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo