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 07/02/2007, 15h39   #1
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Par défaut [Taille] Estimation de la taille d'une ligne

Je sais... Je sais... Probablement, j'enfonce une porte déjà ouverte...
Je m'en excuse par avance. Mais j'aimerais que l'on éclaire ma lanterne sur ci-dessous

Version : Oracle 9.2.0.6
J'ai une table avec les caractéristiques suivantes :
  • Sous-partitionnée
  • EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
  • 102 473 112 lignes
  • avg(avg_row_len) = 156o de la table dba_tab_subpartitions
  • occupation en tablespace = 26 287 Mo
  • pct_free=10, pct_used=40
  • Uniquement de truncate partition et insert par SQL*Loader sans direct path : jamais de delete, jamais de update (je sais que pct_free peut être amené à 0... )
J'ai un avg_row_len de 156 o obtenu par la requête
Code :
1
2
3
4
5
 
SELECT table_name,round(avg(avg_row_len)) 
FROM dba_tab_subpartitions 
WHERE table_name ='MaTable' 
GROUP BY table_name
Les statistiques obtenues quotidiennement (entre autres le avg_row_len) sont réalisées sur la nouvelle partition J-1 et obtenues par la commande
Code :
1
2
3
 
DBMS_STATS.GATHER_TABLE_STATS('OWNER','${1}', '${2}', estimate_percent => 75,  granularity => 'SUBPARTITION',cascade => TRUE);
DBMS_STATS.GATHER_TABLE_STATS('OWNER','${1}', '${2}', estimate_percent => 75, granularity => 'PARTITION',cascade => TRUE);
ou $1 est la table et $2 la partition

L'estimation (à l'extent près) de l'occupation de la table est obtenue par la commande suivante :
Code :
1
2
3
4
5
6
7
8
9
 
SELECT s.table_name AS latable,
           s.partition_name ,
           count(*) AS nb,
           sum  (e.BYTES)/1024/1024 AS taille
   FROM dba_extents e,dba_tab_subpartitions s 
   WHERE e.PARTITION_NAME=s.SUBPARTITION_NAME 
   AND table_name='MaTable'
   GROUP BY s.table_name,s.partition_name
J'arrive, enfin à ma question...
Pourquoi un avg_row_len=156o (ce qui me semble acceptable à ma connaissance des données chargées) alors que 26 827 Mo / 102 473 112 = 269o ? etc ...

Je m'attendais à une différence (il y a tjs un surcout de stockage de la donnée quelque soit le SGBDR) mais pas presque 72%...
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 15h56   #2
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Je viens de faire un autre recoupement...

db_block_size=8192o
Code :
1
2
3
4
 
SELECT sum(blocks) 
FROM dba_tab_subpartitions 
WHERE table_name='MaTable'
J'obtiens 2 344 143

Soit mon calcul 2 344 143 * 8 192 /102 473 112 = 186 o
Cela me semble plus cohérent avec 156o

Mais alors pourquoi un tel delta à partir de l'occupation en tablespace et les statistiques ... ?
cquilgars 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 12h59.


 
 
 
 
Partenaires

Hébergement Web