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 :

Taille réelle d'une table


Sujet :

Oracle

  1. #1
    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 Taille réelle d'une table
    Dans DBA_SEGMENTS, je peux trouver la taille alloué a une table. J'aimerais moi savoir quelle est la taille réelle de ma table. Pour essayer d'évaluer quand aura lieux le prochain NEXT extents.

    Merci,

    PS Je suis d'accord que dans une base "normal" on pas besoin de se poser cette question (et heureusement) mais j'en ai besoin pour générer un cas de test.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Wurlitzer
    Dans DBA_SEGMENTS, je peux trouver la taille alloué a une table. J'aimerais moi savoir quelle est la taille réelle de ma table. Pour essayer d'évaluer quand aura lieux le prochain NEXT extents.

    Merci,

    PS Je suis d'accord que dans une base "normal" on pas besoin de se poser cette question (et heureusement) mais j'en ai besoin pour générer un cas de test.

    la taille réelle correspond à block dans dba_segments

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    bytes plutôt non ?

    Edit : autant pour moi, j'avais pas lu

    Sinon, la taille prise ou la taille allouée c'est pareil pour une table non ?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Fred_D
    bytes plutôt non ?

    Edit : autant pour moi, j'avais pas lu

    Sinon, la taille prise ou la taille allouée c'est pareil pour une table non ?

    Pas tout à fait , il y a toujours une différence entre une taille alloué et taille occupé

  5. #5
    Membre habitué Avatar de ariesnojf
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 188
    Points
    188
    Par défaut
    J'avais trouvé sur ce forum ceci pour l'espace des TBS. peut être faut-il amélioré pour descendre sur une table (perso j'en suis pas capable ) ???

    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
     
     
    select  nvl(b.tablespace_name,
        nvl(a.tablespace_name,'UNKNOWN')) "Tablespace",
        kbytes_alloc "Taille",
            decode(Allouable, 0, kbytes_alloc, allouable) "Extend",
        kbytes_alloc-nvl(kbytes_free,0) "Uti réel",
        nvl(kbytes_free,0) "Lib réel",
        trunc((kbytes_alloc-nvl(kbytes_free,0))/kbytes_alloc, 4)*100 "Uti réel %",
            decode(Allouable, 0, kbytes_alloc, allouable)-(kbytes_alloc-nvl(kbytes_free,0)) "Lib virt",
            trunc((kbytes_alloc-nvl(kbytes_free,0))/decode(Allouable, 0, kbytes_alloc, allouable), 4)*100 "Uti virt %",
        data_files "Fichiers  "
    from ( select sum(bytes)/1024/1024 Kbytes_free,
        max(bytes)/1024/1024 largest,
            tablespace_name
            from sys.dba_free_space
            group by tablespace_name ) a,
         ( select sum(bytes)/1024/1024 Kbytes_alloc,
          sum(maxbytes)/1024/1024 Allouable,
         tablespace_name,
         count(*) data_files
         from sys.dba_data_files
         group by tablespace_name )b
    where a.tablespace_name (+) = b.tablespace_name
    order by 1;

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par Jaouad
    Pas tout à fait , il y a toujours une différence entre une taille alloué et taille occupé
    ça se joue au bloc prêt quoi... non ?

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Admettons une base "propre" qui vient d'être chargé . On est en droit de s'attendre à ce que taille alloué = taille occupé , et bien même la ca peut ne peut pas être le cas , notamment lors de la définitions de PCT_FREE et s'il y a ou pas du chainage ( notamment lorsque l'on charge des données particuliéres : son , vidéo)
    Mais en régle général il y a une différence trés trés minime

    Par contre suite à des delete ou update une fragmentation peut apparaitre avec une table en gruyéres . Et là la différence peut être plus importante. Elle dégrade forcément la volumétrie mais également les perfs

    Jaouad

  8. #8
    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
    Je me trompe peut etre de vocabulaire mais pour moi il y a une différence entre la taille alloué et la taille réelle.

    Pour moi la taille allouée correspond correspond au nombre d'extent et a leur taille. Alors que la taille réellle est pour moi le taux d'occupation de ces extents.

    Ce sera peut etre plus simple avec avec un petit extent

    Je crée une table avec un INITAL à 1 M. Elle alloue donc un 1Mo meme si je n'ai aucune donnée. J'ai donc taille alloué 1Mo Taille réelle 0 Mo. Si je commence à la remplir avec 10 ligne de 10ko, je vais avoir toujours taille alloué 1Mo mais taille réelle 100 ko.

    Mon but est de savoir quand je suis pret de ma limite d'allocation et donc quand je vais devoir alloué un nouvel extents

    Pour moi Bytes et Blocks donne la taille alloué et non pas la taille reelle.

    J'espere que c'est plus clair maintenant.

    Vous avez de nouvelles idées ?

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ha oui... j'oubliais le PCT_FREE

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par Wurlitzer
    Mon but est de savoir quand je suis pret de ma limite d'allocation et donc quand je vais devoir alloué un nouvel extents
    c'est pas plus simple de mettre un MAXEXTENT UNLIMITED ?

    Sinon, je te propose ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT	o.tablespace_name					    ts	,
    	o.owner								,
    	o.SEGMENT_NAME						    nom_objet,
    	to_char(o.bytes/1024)					    taille,
    	to_char(o.EXTENTS)					    extents,
    	to_char(o.MAX_EXTENTS)					    max_extents
    FROM	sys.dba_segments		o
    WHERE	extents > (max_extents*8/10)
    AND     max_extents > 0
    ORDER BY 1, 2, 3;
    qui liste les segments dont 80% des extents sont pris (max_extents*8/10)

  11. #11
    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
    Si si si je suis completement d'accord avec toi c'est plus simple d'etre en UNLIMITED.

    Mais mon problème n'est pas de savoir combien d'extent je peux encore alloué mais plutot quand je vais alloué le prochaine extent pcq il est bientot plein.

    Mais bon c'est juste de la curiosité intellectelle. Je suis d'accord que dans la vrai vie on ne va pas s'amuser à gérér l'espace d'aussi pret.

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Wurlitzer
    Si si si je suis completement d'accord avec toi c'est plus simple d'etre en UNLIMITED.

    Mais mon problème n'est pas de savoir combien d'extent je peux encore alloué mais plutot quand je vais alloué le prochaine extent pcq il est bientot plein.

    Mais bon c'est juste de la curiosité intellectelle. Je suis d'accord que dans la vrai vie on ne va pas s'amuser à gérér l'espace d'aussi pret.
    la solution à ton probléme est tablespace Map , à mon avis c'est de la perte de temps pour les raisons que tu décrit . la seule chose interressante dans ce cas est de savoir le nbr d'extent allou pour éviter d'avoir trop de réquete recursive qui vont faire la demande de nouvel extents

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    bonjour Wurlitzer ,
    Citation Envoyé par Wurlitzer
    Dans DBA_SEGMENTS, je peux trouver la taille alloué a une table. J'aimerais moi savoir quelle est la taille réelle de ma table. Pour essayer d'évaluer quand aura lieux le prochain NEXT extents.

    je veut voir les tailles alloués pour chaque table dans ma base de données, ma question est ou je trouve le fichier DBA_SEGMENTS qui contient ces informations.

  14. #14
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Citation Envoyé par infsaf
    je veut voir les tailles alloués pour chaque table dans ma base de données, ma question est ou je trouve le fichier DBA_SEGMENTS qui contient ces informations.
    DBA_SEGMENTS est une table et non pas un fichier

    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
     
    SQL> desc dba_segments
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ---------------
     
     OWNER                                              VARCHAR2(30)
     SEGMENT_NAME                                       VARCHAR2(81)
     PARTITION_NAME                                     VARCHAR2(30)
     SEGMENT_TYPE                                       VARCHAR2(18)
     TABLESPACE_NAME                                    VARCHAR2(30)
     HEADER_FILE                                        NUMBER
     HEADER_BLOCK                                       NUMBER
     BYTES                                              NUMBER
     BLOCKS                                             NUMBER
     EXTENTS                                            NUMBER
     INITIAL_EXTENT                                     NUMBER
     NEXT_EXTENT                                        NUMBER
     MIN_EXTENTS                                        NUMBER
     MAX_EXTENTS                                        NUMBER
     PCT_INCREASE                                       NUMBER
     FREELISTS                                          NUMBER
     FREELIST_GROUPS                                    NUMBER
     RELATIVE_FNO                                       NUMBER
     BUFFER_POOL                                        VARCHAR2(7)
     
    SQL>

  15. #15
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    A mon avis,il faut chercher du côté de DBMS_SPACE.UNUSED_SPACE qui retourne pour un segment donnée l'espace non utilisé.

    Si je créé une table (en gestion manuelle des extents) avec un initial de 100M et que je n'y insère rien, j'ai un alloué à 100M et un utilisé à 0. (ou presque)

    et seule une analyse de type dbms_space peut donner cette info.
    Après, les segments/extents (donc tables) se fient uniquement sur l'alloué.

  16. #16
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    ma probléme est comment voir la taille de chaque table à ma base de données , comment je doit utiliser la table dba_segments pour obtenu mes besoin

  17. #17
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT segment_name "Nom Table", BYTES / 1024 / 1024 "Taille en Mo"
      FROM dba_segments
     WHERE segment_type = 'TABLE'
    Hope this helps

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    (case when segment_type = 'INDEX' then o.table_name else s.segment_name end) "Nom Table", sum(BYTES / 1024 / 1024) "Taille en Mo"
      FROM dba_segments s
      left outer join all_indexes o on o.index_name = s.segment_name
     WHERE 
     segment_type IN ('TABLE','INDEX') 
     group by (case when segment_type = 'INDEX' then o.table_name else s.segment_name end)
     order by 2 desc;
    Légère amélioration

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

Discussions similaires

  1. Récupérer la taille réelle d'une image
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/07/2013, 14h37
  2. Taille réelle d'une table
    Par Doug_ dans le forum Administration
    Réponses: 2
    Dernier message: 10/08/2009, 10h35
  3. taille maximale d'une table en termes physiques
    Par wisstiti3 dans le forum Administration
    Réponses: 3
    Dernier message: 22/09/2008, 10h18
  4. comment modifier la taille maximale d'une table
    Par mysqldotnet dans le forum Administration
    Réponses: 0
    Dernier message: 14/04/2008, 17h38

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