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 :

Comparaison dba_segments et blocks


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut Comparaison dba_segments et blocks
    Avec les requetes ci-dessous je n'obtiens pas le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      SQL> select segment_name, bytes
      2  from dba_segments
      3   where segment_name = 'MaTable' ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select (((blocks*4096)*1024)/8) from user_tables where table_name =  'MaTable' ;
    mais peut-être que je converti mal

    Merci de votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Bonjour,

    1. La conversion n'est pas correcte.

    En supposant que ton paramètre db_block_size est égal à 4096

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> show parameter db_block_size
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size                        integer     4096
    Il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT blocks*4096 FROM user_tables WHERE table_name =  'MaTable' ;
    2. La colonne BLOCKS dans DBA_TABLES correspond aux blocs réellement occupés par la table, tant dis que la colonne BLOCKS de DBA_SEGMENTS fait référence aux blocks alloués à cette table donc ces valeurs peuvent être différentes

    J'espère que c'est assez clair

    Rachid

  3. #3
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Citation Envoyé par mydb_server Voir le message
    Bonjour,


    2. La colonne BLOCKS dans DBA_TABLES correspond aux blocs réellement occupés par la table, tant dis que la colonne BLOCKS de DBA_SEGMENTS fait référence aux blocks alloués à cette table donc ces valeurs peuvent être différentes



    Rachid
    Ce ne sont pas les blocks réellement occupés mais les blocks qui on déjà été occupés c'est à dire en fait les blocks au dessus du HWM. Ces blocks peuvent être vides si les lignes ont été deletées.

    ex:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    SQL> create table zizou as select * from dba_objects;
     
    Table created.
     
    SQL> select blocks from dba_segments where segment_name='ZIZOU';
     
        BLOCKS
    ----------
          1808
     
    SQL> select blocks from dba_tables where table_name='ZIZOU';
     
        BLOCKS
    ----------
     
    SQL> exec dbms_stats.gather_table_stats(USER,'ZIZOU');
     
    PL/SQL procedure successfully completed.
     
    SQL> select blocks from dba_tables where table_name='ZIZOU';
     
        BLOCKS
    ----------
          1804
     
    SQL> delete zizou;
     
    129244 rows deleted.
     
    SQL> commit;
     
    Commit complete.
     
    SQL> select blocks from dba_tables where table_name='ZIZOU';
     
        BLOCKS
    ----------
          1804
     
    SQL> select blocks from dba_segments where segment_name='ZIZOU';
     
        BLOCKS
    ----------
          1808

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    D'où mon expression "réellement occupés par la table", dans le sens que ces blocs font LOGIQUEMENT partie de la table, et non pas dans le sens qu'il y ait des lignes dedans ou pas

    Ce ne sont pas les blocks réellement occupés mais les blocks qui on déjà été occupés c'est à dire en fait les blocks au dessus du HWM. Ces blocks peuvent être vides si les lignes ont été deletées.
    Je dirais plutôt en dessous du HWM

    Rachid A.

  5. #5
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Citation Envoyé par mydb_server Voir le message
    D'où mon expression "réellement occupés par la table", dans le sens que ces blocs font LOGIQUEMENT partie de la table, et non pas dans le sens qu'il y ait des lignes dedans ou pas



    Je dirais plutôt en dessous du HWM

    Rachid A.
    Tout dépend de quel point de vue on se situe.
    Dans le schéma ci-dessous, si on regarde le segment de cette manière, les blocks used sont au dessus du HWM:
    ;-)

    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
     
    _________________________
    |                        |
    |                        |
    |                        |
    | USED BLOCKS            |
    |                        |
    |                        |
    |                        |
    |                        |
    |                        |
    |                        |
    |________________________| HWM
    |  UNUSED BLOCKS         |
    |________________________|

  6. #6
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Ok merci,

    J'ai une table qui occupe 69 256 blocks (DBA_TABLES) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> SELECT blocks FROM dba_tables WHERE table_name = 'MaTable' ;
     
        BLOCKS
    ----------
         69256

    alors que mon db_block_buffers=32 768 (128m), il m'est donc impossible de la stocker en mémoire dans un buffer_pool_keep ?

    Merci ton aide

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Peux-tu nous détailler ce que tu veux faire au juste?

    Rachid A.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Tout dépend de quel point de vue on se situe.
    Exact.

    Sauf que HWM veut dire High Water Mark

    A méditer

    Rachid A.

  9. #9
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Citation Envoyé par totoche Voir le message
    Ok merci,

    J'ai une table qui occupe 69 256 blocks (DBA_TABLES) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> SELECT blocks FROM dba_tables WHERE table_name = 'MaTable' ;
     
        BLOCKS
    ----------
         69256

    alors que mon db_block_buffers=32 768 (128m), il m'est donc impossible de la stocker en mémoire dans un buffer_pool_keep ?

    Merci ton aide
    Si t'es en gestion automatique de la SGA alors le DB_BLOCK_BUFFERS ne correspond pas à la taille de ton buffer cache mais à sa taille minimale.

    Pour connaitre la taille réelle tu dois interroger la vue v$sgastat

  10. #10
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Merci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    NAME                            BYTES
    -------------------------- ----------
    db_block_buffers            134217728
    (134217728/1024)/1024 --> 128m

    Ma table est > a mes buffers ...

  11. #11
    Membre expérimenté Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Par défaut
    Citation Envoyé par totoche Voir le message
    Merci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    NAME                            BYTES
    -------------------------- ----------
    db_block_buffers            134217728
    (134217728/1024)/1024 --> 128m

    Ma table est > a mes buffers ...
    DB_BLOCK_BUFFERS correspond au nombre de block et non pas à la taille du buffer cache.
    Quelle est la version d'oracle que t'utilises ?

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

Discussions similaires

  1. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  2. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  3. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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