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

Oracle Discussion :

[9i] Taille table / index


Sujet :

Oracle

  1. #1
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut [9i] Taille table / index
    Bonjour, je recherche de meilleur moyen de définir au mieux la Taille d'une Table et d'un Index.
    Afin de connaître la place que je vais récupérer si je supprime des objets.

    J'ai donc regardé les différents posts sur le sujet et j'ai utilisé les tables all_tables et dba_semgents.
    Cependant je ne trouve pas les même données, cela va du simple au double est ce normal ?

    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
    46
     
    SQL> SELECT value FROM v$parameter WHERE name='db_block_size';
     
    VALUE
    --------------------------------------------------------------------------------
    8192
     
    SQL> SELECT d.bytes/1024/1024,segment_name FROM dba_segments d WHERE segment_name like 'MA_TABLE';
     
    D.BYTES/1024/1024
    -----------------
    SEGMENT_NAME
    --------------------------------------------------------------------------------
                ,9375
    MA_TABLE
     
     
    SQL>  
    SQL> SELECT (blocks*8192)/1024/1024 AS "Taille en Mo" FROM all_tables WHERE table_name='MA_TABLE';
     
    Taille en Mo
    ------------
          ,40625
     
    SQL> 
    SQL> ANALYZE TABLE MA_TABLE COMPUTE STATISTICS;
     
    Table analysée.
     
    SQL> 
    SQL> SELECT d.bytes/1024/1024,segment_name FROM dba_segments d WHERE segment_name like 'MA_TABLE';
     
    D.BYTES/1024/1024
    -----------------
    SEGMENT_NAME
    --------------------------------------------------------------------------------
                ,9375
    MA_TABLE
     
     
    SQL>  
    SQL> SELECT (blocks*8192)/1024/1024 AS "Taille en Mo" FROM all_tables WHERE table_name='MA_TABLE';
     
    Taille en Mo
    ------------
          ,40625
    Pourtant j'ai refait les stats !

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Ess-ce que tous les blocs sont utilisés dans la table ? DBA_TABLES.BLOCKS retourne le nombre de blocs utilisés dans la table alors que DBA_SEGMENT.BYTES retourne la taille du segment que les blocs soient utilisés ou non.

    Voir aussi l'utilisation de DBMS_SPACE pour avoir plus d'information sur l'état des blocs: http://www.developpez.net/forums/sho...ght=DBMS_SPACE

  3. #3
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    J'en déduis donc que dans all_tables.blocks, c'est le fameux HWM donc nombre de blocks maximum utilisé un jour.

    - all_tables.blocks * db_block_size = Taille totale utilisée / réservée par une table.
    - dba_segments.bytes = Taille utilisée par la table ?? même pas non ?

    Est ce bien cela ?

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Oui, je crois que c'est ça(d'après: http://download-uk.oracle.com/docs/c...mops.htm#44852):

    The data dictionary keeps track of the blocks that have been populated with rows. The high water mark is used as the end marker during a full table scan. The high water mark is stored in DBA_TABLES.BLOCKS. It is reset when the table is dropped or truncated.
    La taille dans dba_segments ne tient pas compte de ce qui est alloué et de ce qui est libre au niveau de chaque bloc: je crois que c'est la taille de tous les extents de la table (sauf cas particuler comme le partitionnement ou les LOBS).

  5. #5
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    D'accord merci, donc pour avoir la taille que l'on va récupérer après un drop / truncate d'une table, il faut utiliser le all_tables.blocks.

    Car le HWM, informe sur le point le plus haut utilisé et comme oracle ne libère pas les espaces, nous avons donc le nb d'espace réservé qui sera libéré lors du drop de la table.

    Merci

  6. #6
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par sygale
    D'accord merci, donc pour avoir la taille que l'on va récupérer après un drop / truncate d'une table, il faut utiliser le all_tables.blocks.
    Non je ne suis pas d'accord. D'apres ce que je comprends DBA_SEGMENTS est la taille de tous les segments. C'est donc la taille réellement alloué sur disque et donc celle que tu vas récupérer en cas de DROP.

    Quant à ALL_TABLES.BLOCK la HWM c'est la taille maximun utilisés dans cette espace aloué. Dans ton cas cela n'a pas d'importance puisque.

    De mon coté je me pose une question du meme genre. Qu'elle est la taille que je peux gagner si je REBUILD une table qui a eu beaucoup de DELETE. Et qui donc a beaucoup grossi gros HWM et gros DBA_SEGMENTS.BYTES mais qui maintenant est creuse.

    J'essaye d'évaluer ca avec ALL_TABLES.NUM_ROWS * ALL_TABLES.AVG_ROW_LEN mais ca na pas l'air fiable. J'ai parfois des taux d'occupation de ma table supérieur à 100 %

Discussions similaires

  1. Taille des Indexes et nom de la table
    Par Kain-sc dans le forum SQL
    Réponses: 2
    Dernier message: 13/01/2010, 15h48
  2. Limitations d'une table (index & taille)
    Par joefou dans le forum SQL
    Réponses: 8
    Dernier message: 09/01/2008, 15h21
  3. en-tête de table/index endommagée
    Par colombe dans le forum Bases de données
    Réponses: 5
    Dernier message: 08/10/2005, 11h55
  4. vider table + index primaire
    Par jihed dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/07/2004, 16h43
  5. Table + Index Partionnées
    Par superfly dans le forum Import/Export
    Réponses: 7
    Dernier message: 18/03/2004, 09h52

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