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 :

Buffer, buffer header, data block, LRU, cache buffer chain


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    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 : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Buffer, buffer header, data block, LRU, cache buffer chain
    Hello tout le monde,

    J'ai quelques soucis à visualiser comment s'articulent les objets suivants : Buffer, buffer header, data block, LRU, cache buffer chain...
    Les articles ou la doc d'Oracle ne sont pas toujours clairs, surtout que plusieurs personnes confondent buffer et buffer header.

    Voici ce que j'ai compris : merci de me dire si je me trompe.

    Database Buffer Cache : un ensemble d'objets appelés Buffers, situé dans la SGA. C'est comparable à un parking.
    Buffer : un emplacement réservé dans le Database Buffer Cache où Oracle va copier un data block depuis le disque dur. C'est comparable à une place de parking et la voiture représente le data block.
    Buffer Header : équivalent pour un buffer du data block header pour un data block. MAIS, à la différence du data block header qui fait partie du data block, le buffer header est détaché du buffer et réside dans la Shared Pool et non pas dans le Database Buffer Cache. Un buffer header contient un pointeur vers un buffer et pas de data block.
    LRU : liste de buffers headers et non pas de buffers ni de data blocks. Dans la LRU se trouvent les buffers headers des buffers gérant les data blocks accédés dernièrement par l'application.
    Cache Buffer Chain : liste chaînée de buffers comme son nom l'indique (et non pas de buffers headers). Le database buffer cache est composé de milliers de Cache Buffer Chain. Quand Oracle recherche si un data block est déjà en mémoire, il parcourt un Cache Buffer Chain précis : celui-ci est identifié à partir d'une fonction de hash appliquée sur le DBA (Data Block Address) du bloc de données recherché.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Les buffers sont les données en mémoire, qui sont lus/écrit sur disque en blocs
    les meta-données (infos relative à ces buffers en mémoire) de ces buffers sont les buffer headers (cf. V$BH)
    la structure de recherche d'un buffer à partir de son DBA (block address) est le cache buffer chain: accès par hash puis parcours de la liste.
    LRU est un algorithme pour garder en cache les buffers les plus souvent manipulés.

    [FONT=Verdana, sans-serif]Cordialement,
    Franck.
    [/FONT]
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    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 : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Je te remercie pour ta réponse Pachot mais j'ai besoin de multiples précisions pour bien comprendre comment s'organisent les différents objets.

    "Les buffers sont les données en mémoire" : pour moi les buffers sont des espaces vides du database buffer cache, qui peuvent accepter les data blocks lus sur disque dur. Sommes-nous d'accord? En d'autre terme, le buffer renferme un data block mais buffer et data block sont deux concepts différents pour moi.

    cache buffer chain : peux-tu me confirmer que le database buffer cache est composé de milliers de cache buffer chain?

    "LRU est un algorithme pour garder en cache les buffers les plus souvent manipulés." : certes LRU est un algorithme aussi mais pour moi c'est avant tout une liste de buffers headers pointant vers les buffers les plus souvent manipulés..

    Par avance, merci pour tes précisions.

    [EDIT 30/09/2016]
    Visiblement, après avoir relu plusieurs articles, ce qu'on appelle "cache buffer chain" serait en réalité un "cache buffer header chain". Et donc il existerait des milliers ou dizaines de milliers de "cache buffer chain" composés de buffer header dont chacun pointe vers un buffer du database buffer cache contenant un data bloc.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    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 : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Hello,

    Je me permets de remonter le post.
    Merci de me dire si je suis dans le juste ou non par rapport à mes précédents posts.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous avez regarder dans Oracle Core, il me semble que vous l'avez?

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je me suis rappelé à avoir lu il y a quelques mois de cela, c'est article Cache Buffer Chains Demystified

  7. #7
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    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 : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Bonjour mnitu,

    Oui, j'ai le livre de Jonathan Lewis. Passionnant mais très dur à suivre car il utilise quasiment que les structures X$.

    Cependant je lui fais le reproche suivant : page 104, au début, dans la partie Note il écrit "A common practice, and one I shall adopt, is to say "the buffer" when you really mean "the buffer header pointing at the buffer" Zut, c'est exactement ce qu'il ne fallait pas faire puisque avec cette pratique on confond Buffer et Buffer Header alors que ce sont bien deux objets différents et que je veux justement comprendre comment ils s'articulent entre eux.
    En outre, p110 figure 5.6, il identifie le même objet avec deux noms différents : "Cache buffers chains / buckets" : pour lui c'est la même chose! Je pense que c'est une erreur mais quand même...

    Je connais aussi l'article "Cache Buffer Chains Demystified" : très très intéressant.

    Si je suis venu ici c'est après avoir lu plusieurs articles et livres et donc je voulais faire une synthèse de ce que j'avais compris et avoir l'avis de DBA experts pour valider si je suis dans le vrai ou non.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    A ma compréhension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Shared pool
    
               |hash bucket1|<-->|bh11(^p01)|-><-|bh12(^p02)|-><-|bh13(^p03)|<-->
              /
             /
            /
    |latch1|---|hash bucket2|<-->|bh21(^p52)|-><-|bh22(^p67)|<-->
            \
             \
              \
               |hash bucket3|<-->|bh31(^p101)|-><-|bh32(^p24)|<-->
    
    
            /
    |latch2|-
            \
    
    
    Buffer Cache
     01    02    03    04    05    06    07    08    09   10 ...
    |db1 ||db1c||db1c||db1c||db2 ||db2c||free||db4 ||db4c||free|...
    ...|free||free|
    
    Lien:
    ^p01 --> buffer 01
    ^P02 --> buffer 02
    
    Légende: 
    <--> liste doublement enchainée
    ^p - pointer vers Buffer cache
    dbx - data block apartenant à l'objet x
    dbxc - clone du block appartenant à l'objet x
    Buffer cache c’est la zone de mémoire où sont lu les blocks des données.
    Buffer est une adresse de mémoire où un block peut être lu.
    Chaque buffer possède un état : libre, propre (clean) ou impropre (dirty).
    La lecture du buffer est fait soit en mode curent soit en mode consistent.
    L’algorithme de hachage d’un block est basé dans ses grandes lignes sur le numéro du fichier et le numéro du bloc.

    Pour chaque buffer il existe une structure appelée entête du buffer (buffer header) qui pointe vers le buffer dans le buffer cache. Cette structure est localisée dans le Shared Pool.
    Ces entêtes de buffer sont organisés dans des listes doublement enchainées (chained lists) et chaque liste est reliée à un compartiment de hachage (hash bucket ) qui représente la tête de la liste.

    Pour optimiser la gestion des buffers il est préférable d’avoir plusieurs listes courtes à la place des quelques listes longs.
    A un instant donné un seul procès serveur peut inspecter la liste il est donc nécessaire de protéger l’accès via des latchs.

    Un latch protège plusieurs compartiments de hachage qui sont des têtes des listes.

    Un même entête de buffer peut être référencé dans plusieurs listes (mémoire, liste LRU, dirty blocks).

    La requête suivante:
    Select ename from emp where empno = 7369
    Implique le déclanchement de l’algorithme suivant (vu de l’avion bien sûr)
    1. A partir du rowid de l’enregistrement à modifier (probablement localisé via un index) on trouve le numéro du fichier et celui du bloc qui contient l’enregistrement.
    2. Ces informations permettent de calculer le compartiment de hachage (hash bucket) qui localise la liste des entêtes des buffers.
    3. Le processus serveur essaie de poser le verrou nécessaire, latch, pour ce compartiment de hachage.
    4. Si le verrou a été posé, il parcourt la liste pour vérifier si la version nécessaire du block existe dans la liste. Si il le trouve il accède en le protégeant (buffer pin/unpin)
    5. Si non trouvé il cherche un buffer libre dans le buffer cache. Il défait le lien de l’entête buffer de la chaine courante (unlink the buffer header) et il le lie à la liste de hachage puis il lit le block dans le buffer.
    6. Si le latch n’a pas pu être posé attend en « brulant » du CPU. Si le latch n’est pas disponible il s’endorme puis réessaie d’obtenir le latch en augmentant à chaque itération le temps du sommeil.


    J'espère que ça aidera.

  9. #9
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    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 : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Un gros merci à toi mnitu, notamment pour le schéma qui représente bien ce que j'avais compris.

    Juste une dernière remarque : le "Cache Buffer Chain", qui serait plus selon moi un "Cache Buffer HEADER Chain", c'est bien la première liste, celle avec les buffers headers bh11, bh12, bh13?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Chaque liste qui commence par un buffer header est qui est protégée par un latch est un "cache buffer chain". Il existe N listes, leur nombre est contrôle par un paramètre interne d'Oracle

Discussions similaires

  1. Hit ratio cache buffer
    Par sellfe dans le forum Administration
    Réponses: 3
    Dernier message: 16/12/2009, 16h37
  2. Réponses: 19
    Dernier message: 19/06/2009, 21h59
  3. Générer un header de bitmap pour un buffer de bytes
    Par user 56gt8 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 23/09/2007, 21h30
  4. [forms] Data Block Lov Plusieurs tables jointure
    Par loupin dans le forum Forms
    Réponses: 5
    Dernier message: 13/09/2006, 21h39
  5. [Noyau] Accès aux blocks dans le buffer cache
    Par gtaoufik dans le forum Oracle
    Réponses: 12
    Dernier message: 26/08/2005, 14h17

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