Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2007, 11h02   #1
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
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 :
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 !
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 11h28   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 11h45   #3
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
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 ?
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 12h04   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Oui, je crois que c'est ça(d'après: http://download-uk.oracle.com/docs/c...mops.htm#44852):

Citation:
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).
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 12h10   #5
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
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
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 09h18   #6
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
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 %
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web