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 :

Les vues dynamiques de performances : V_$, V$, X$, GV_$ [11gR2]


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Les vues dynamiques de performances : V_$, V$, X$, GV_$
    Bonjour,

    Dans la doc Oracle https://docs.oracle.com/cd/B19306_01...1.htm#i1398692 je lis que “The actual dynamic performance views are identified by the prefix V_$. Public synonyms for these views have the prefix V$.”

    Sur http://www.dba-oracle.com/t_x$_tables.htm il est marqué "Oracle builds v$ views upon the Oracle x$ tables".

    Je ne comprends pas la hiérarchie de ces vues car selon Oracle on a V_$ puis V$ et selon Burleson on aurait X$ puis V$ sans dire où est V_$.

    En regardant dans ma base la vue V$BH j'ai ceci.
    V$BH est un synonyme pour la vue V_$BH.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from dba_synonyms where synonym_name = 'V$BH';
    OWNER                          SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME                     DB_LINK                                                                                                                         
    ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------------------------------------
    PUBLIC                         V$BH                      	SYS                            		V_$BH
    MAIS, et là je ne comprends plus, V_$BH est un extract de V$BH
    On se mord la queue non? Pourquoi V_$BH ne regarde t-il pas dans X$BH?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TEXT FROM DBA_VIEWS WHERE VIEW_NAME = ‘V_$BH’;
    TEXT
    ----------------------------------------------------------------------------------------------------------------------------------------------
    select "FILE#", "BLOCK#","CLASS#","STATUS","XNC","FORCED_READS","FORCED_WRITES", "LOCK_ELEMENT_ADDR","LOCK_ELEMENT_NAME","LOCK_ELEMENT_CLASS","DIRTY","TEMP","PING","STALE","DIRECT","NEW","OBJD","TS#","LOBID","CACHEHINT" from v$bh

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonsoir,

    On tombe souvent sur le site de Donald Burleson quand on demande à Google des renseignements sur Oracle. Je ne suis personnellement pas fan, de mon point de vue il se contente de copier la doc, alors autant aller la lire directement à la source, au moins on est sûr d'avoir la dernière version. Personnellement, j'ajoute à toute recherche concernant oracle la clé "-burleson" afin d'éviter ses trop nombreux sites, mais c'est là un goût personnel.

    Autrement concernant votre question, à l'origine :

    • les objets x$... sont des structures mémoires, seul l'utilisateur SYS peut les voir.
    • les vues gv_$ sont des vues pointant sur ces structures mémoires appartenant au schéma SYS
    • les vues v_$ sont soit des ves sur les structures x$ (si la vue gv_$ correspondante n'existe pas) ou des vues sur les vues gv_$ pour lesquelles on a ajuter une clause where pour se positionner sur l'instance courante
    • les vues gv$ et v$ sont les synonymes publiques des vues gv_$ et v_$


    maintenant ce sont les vues v_$ et gv_$ qui pointent sur les vues v$ et gv$ et c'est pour des questions de compatibilité ascedente essentiellement que l'on garde kes v_$ et gv_$.

    En complément, le texte de définition des "fixed_views" se retrouve dans la vue v$fixed_view_definition

    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
     
    SQL> select * from v$fixed_view_definition where view_name='V$BH'
      2  /
    VIEW_NAME
    ------------------------------
    VIEW_DEFINITION
    --------------------------------------------------------------------------------
        CON_ID
    ----------
    V$BH
    select file#, block#, class#, status, xnc, forced_reads, forced_writes, lock_ele
    ment_addr, lock_element_name, lock_element_class, dirty, temp, ping, stale, dire
    ct, new, objd, ts#, lobid, cachehint, flash_cache, cell_flash_cache, con_id from
     gv$bh where inst_id = USERENV('Instance')
             0
    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
     
    SQL> select * from v$fixed_view_definition where view_name='GV$BH'
      2  /
    VIEW_NAME
    ------------------------------
    VIEW_DEFINITION
    --------------------------------------------------------------------------------
        CON_ID
    ----------
    GV$BH
    select bh.inst_id, file#, dbablk, class, decode(state,0,'free',1,'xcur',2,'scur'
    ,3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite',11,
    'donated', 12,'protected',  13,'securefile', 14,'siop',15,'recckpt', 16, 'flashf
    ree',  17, 'flashcur', 18, 'flashna'), 0, 0, 0, bh.le_addr, le_id1, le_id2, deco
    de(bitand(flag,1), 0, 'N', 'Y'), decode(bitand(flag,16), 0, 'N', 'Y'), decode(bi
    tand(flag,1536), 0, 'N', 'Y'), decode(bitand(flag,16384), 0, 'N', 'Y'), decode(b
    itand(flag,65536), 0, 'N', 'Y'), 'N', obj, ts#, lobid,  bitand(OBJ_FLAG, 240)/16
    , decode(bitand(OBJ_FLAG, 48)/16, 1, 'KEEP', 2, 'NONE', 'DEFAULT'), decode(bitan
    d(OBJ_FLAG, 192)/64, 1, 'KEEP', 2, 'NONE', 'DEFAULT'), bh.con_id from x$bh bh, x
    $le le where bh.le_addr = le.le_addr (+)
             0

  3. #3
    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
    Hello ojo77,

    OK quand tu dis "les vues gv$ et v$ sont les synonymes publiques des vues gv_$ et v_$", c'est ce que j'avais compris.

    MAIS pour V$BH c'est l'inverse, c'est la vue V_$BH qui se base sur V$BH et pas l'inverse.
    On le voit très bien avec DBMS_METADATA. C'est ça qui m'interpelle : on devrait avoir une autre hiérarchie.
    En outre comme je l'ai dis plus haut, V$BH se base lui même sur V_$BH qui se base sur V$BH on marche sur la tête en se mordant la queue!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT DBMS_METADATA.GET_DDL('VIEW','V_$BH','SYS') FROM DUAL;
     
    DBMS_METADATA.GET_DDL('VIEW','V_$BH','SYS')                                     
    --------------------------------------------------------------------------------
     
      CREATE OR REPLACE FORCE VIEW "SYS"."V_$BH" ("FILE#", "BLOCK#", "CLASS#", "STAT
    US", "XNC", "FORCED_READS", "FORCED_WRITES", "LOCK_ELEMENT_ADDR", "LOCK_ELEMENT_
    NAME", "LOCK_ELEMENT_CLASS", "DIRTY", "TEMP", "PING", "STALE", "DIRECT", "NEW", 
    "OBJD", "TS#", "LOBID", "CACHEHINT") AS                                         
      select "FILE#","BLOCK#","CLASS#","STATUS","XNC","FORCED_READS","FORCED_WRITES"
    ,"LOCK_ELEMENT_ADDR","LOCK_ELEMENT_NAME","LOCK_ELEMENT_CLASS","DIRTY","TEMP","PI
    NG","STALE","DIRECT","NEW","OBJD","TS#","LOBID","CACHEHINT" from v$bh           
     
    1 row selected.

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonsoir Ikebukuro,

    Non on ne marche pas sur la tête, on fouille où Oracle ne souhaite pas qu'on fouille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      1   select SYNONYM_NAME
      2        , OWNER
      3        , TABLE_OWNER
      4        , TABLE_NAME
      5  from dba_synonyms
      6* where SYNONYM_NAME = 'V$BH' or TABLE_NAME='V$BH'
    Résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SYNONYM_NA OWNER  TABLE_OWNE TABLE_NAME
    ---------- ------ ---------- ----------
    V$BH       PUBLIC SYS        V_$BH
    MAIS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from v$fixed_view_definition where view_name='GV$BH'
    /
    Résultat

    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
    VIEW_NAME
    ------------------------------
    VIEW_DEFINITION
    --------------------------------------------------------------------------------
        CON_ID
    ----------
    GV$BH
    select bh.inst_id, file#, dbablk, class, decode(state,0,'free',1,'xcur',2,'scur'
    ,3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite',11,
    'donated', 12,'protected',  13,'securefile', 14,'siop',15,'recckpt', 16, 'flashf
    ree',  17, 'flashcur', 18, 'flashna'), 0, 0, 0, bh.le_addr, le_id1, le_id2, deco
    de(bitand(flag,1), 0, 'N', 'Y'), decode(bitand(flag,16), 0, 'N', 'Y'), decode(bi
    tand(flag,1536), 0, 'N', 'Y'), decode(bitand(flag,16384), 0, 'N', 'Y'), decode(b
    itand(flag,65536), 0, 'N', 'Y'), 'N', obj, ts#, lobid,  bitand(OBJ_FLAG, 240)/16
    , decode(bitand(OBJ_FLAG, 48)/16, 1, 'KEEP', 2, 'NONE', 'DEFAULT'), decode(bitan
    d(OBJ_FLAG, 192)/64, 1, 'KEEP', 2, 'NONE', 'DEFAULT'), bh.con_id from x$bh bh, x
    $le le where bh.le_addr = le.le_addr (+)
             0
    On continue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select view_name from dba_views where view_name like '%V$BH'
    /
    Résultat

    Encore ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select view_name from dba_views where view_name like '%V_$BH'
    /
    Résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    VIEW_NAME
    --------------------------------------------------------------------------------
    V_$BH
    GV_$BH
    Donc on est bien dans ce qui est indiqué dans la doc Oracle
    V$BH et GV$BH sont bien des synonymes publiques sur, respectivement, V_$BH et GV_$BH. (et c'est la même chose pour toutes les vues V_$ et GV_$).

    Mais alors pourquoi DBMS_METADATA nous dis le contraire et pourquoi oracle nous mbrouille avec le contenu de v$fixed_view_definition ?

    J'émets les 2 hypothèses suivantes :

    Essentiellement parcequ'on touche à des structures mémoire et qu'oracle nous enjoint de n'utiliser QUE les synonyme (G)V$ et pas les vues qui appartiennent à SYS ( dans la doc jusqu'en 10.2 )

    V$ Views

    The actual dynamic performance views are identified by the prefix V_$. Public synonyms for these views have the prefix V$. Database administrators and other users should access only the V$ objects, not the V_$ objects.
    Mais aussi parce que v$fixed_view_definition est conçue pour aider les développeurs à utiliser correctement les objets (G)V$ et que ce n'est pas un élément du dictionnaire ( dans la doc aussi )

    Use these definitions to optimize your queries by using indexed columns of the dynamic performance tables.

  5. #5
    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
    Hé ben, on est pas sorti de l'auberge avec toutes ces vues et synonymes imbriqués... merci Oracle

    En tout cas merci pour ta longue réponse détaillée.

  6. #6
    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
    Salut,
    Il y a mieux en 12c. Par exemple, DBA_HIST_SYSSTAT synonyme sur vue metadata link DBA_HIST_SYSSTAT qui est un select sur vue object link INT$DBA_HIST_SYSSTAT qui est un select sur la table WRH$_SYSSTATPas de panique, ça habitue à suivre les dépendances...
    a+,
    Franck.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/08/2015, 09h42
  2. Les tables dynamiques de performance
    Par San_Data dans le forum Oracle
    Réponses: 1
    Dernier message: 31/12/2010, 12h47
  3. Requête sur les vues et performances
    Par Fildz dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2009, 23h10
  4. Gérer dynamiquement les Splitters et les Vues.
    Par elecstr dans le forum MFC
    Réponses: 3
    Dernier message: 21/05/2007, 20h37

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