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

Administration Oracle Discussion :

Question bête : c'est quoi un Dirty Block? [19c]


Sujet :

Administration Oracle

  1. #1
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut Question bête : c'est quoi un Dirty Block?
    Coucou les experts,

    Vous pouvez me donner une définition précise de ce qu'est un dirty block?
    La littérature n'est pas claire, est-ce un "bloc modifié en mémoire, commité, mais NON encore écrit sur disque dur" ou bien "bloc modifié en mémoire, non commité, et NON encore écrit sur disque dur"?

    Ce que je lis sur le web, c'est que les gens font la distinction sur "est-ce que le bloc a été ou non écrit sur le disque dur". Or, pour moi, la différence fondamentale est "est-ce que le bloc modifié a été commité ou non". Pour rappel, Oracle ne fait pas de "dirty read", c'est à dire qu'une session ne verra pas les données NON commitées d'une autre session; donc j'en déduis que c'est bien la notion de COMMIT ou non qui distingue le dirty bloc du bloc clean.

    Attention il y a un piège, Oracle peut très bien écrire sur disque dur un bloc modifié en mémoire, non commité, s'il a besoin de place dans le buffer cache par exemple.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Un dirty block est un block qui a été modifié dans le buffer cache et qui n'a pas encore été écrit sur le disque. Non ce n'est pas lié à la notion de commit, les dirty blocks peuvent très bien être écrits sur disque avant ou après que la transaction committe. C'est ce que tu dis à la fin de ton message d'ailleurs.
    Oracle parie sur le fait qu'on comitte plus souvent qu'on ne rollback, car un rollback a lieu généralement quand une erreur se produit, ce qui doit rester l'exception.

  3. #3
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Exact, rien à voir avec le commit (dirty n'a pas le même sens que dans dirty read). Lorsqu'une session lit un bloc, elle le met en buffer cache (status=xcur dans V$BH - c'est la version courante du bloc partagée par toutes les sessions - il ne peut y en avoir qu'une). Lorsqu'elle y écrit elle le marque comme modifié (dirty=Y dans V$BH) mais ça reste en mémoire (protégé par du redo à rejouer en cas de crash). Puis lorsqu'il est écrit sur disque par DBWR (lors d'un checkpoint) le buffer est disponible pour une autre bloc (status=free dans V$BH). La définition de DIRTY=Y est "block modified" dans https://docs.oracle.com/en/database/...6-678DD8D322A8. Le commit peut arriver avant ou après, c'est complètement dé-corrélé (à l'exception du fait que le redo doit être sur disque avant que le bloc ne le soit - write ahead logging).

  4. #4
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Ahha, je note que le mot DIRTY est utilisé dans deux acceptations différentes; c'est confusant

    Merci pour vos réponses!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question bête (où est passé le ++ ?)
    Par Gueuz dans le forum Ruby
    Réponses: 6
    Dernier message: 01/11/2013, 11h38
  2. Encore une question simple: C'est quoi ça: << ?
    Par Narann dans le forum Débuter
    Réponses: 5
    Dernier message: 23/02/2010, 13h31
  3. [XNA] Question bête : où est le designer ?
    Par Daikyo dans le forum XNA/Monogame
    Réponses: 3
    Dernier message: 21/04/2008, 21h38
  4. [C#]Question bête : Comment tester si un objet est créer?
    Par ben_ghost dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/08/2006, 20h50
  5. [cURL] La question qui tue : C'est quoi une librairie ?
    Par psychoBob dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 27/05/2006, 00h09

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