Bonjour à tous,
Je rencontre quelques difficultés pour sizer une table de ma base Oracle (plus précisement la taille qu'utilise certaines lignes de ma table dans mon tablespace)
J'ai utilisé une requête assez basique trouvée sur le net mais je trouve un delta assez important entre les informations que j'ai calculé et la volumétrie donné par TOAD. Ces calculs me sont utiles pour prévoir le remplissage d'une table. Je précise également
- que c'est une table partitionnée par valeur.
- que ma table est consistué de 2 champs : un INT construit par séquence + 1 BLOB qui est toujours vide (NULL).
- la table est en row movement enable.
Voici mon raisonnement :
1°) Je récupère le nom et le type de toutes les colonnes de ma table
select column_name,data_type
from all_tab_columns where table_name='employees';
2°) je calcule la taille de ma table (un type INT et un BLOB) :
100 bytes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select 3 + avg( nvl(vsize(ID_FIELD),0)+1 + nvl(dbms_lob.getlength(BUFFER_FIELD),0)+1 ) "Total bytes per row" from employees;
3°) J'ajoute la taille de l'index de mon clé primaire ID_FIELD (stockage dans mon tablespace)
22 bytes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select sum(COLUMN_LENGTH) from dba_ind_columns where TABLE_NAME = 'employees';
4°) Je fait la somme :
100 + 22 = 122 Bytes per row (en moyenne)
Quand je multiplie cette moyenne a mon nombre de lignes, je trouve 2,56 Mb.
Quand je regarde dans TOAD et j'additionne les extents utilisés sur les partitions de ma table , je me retrouve avec 3,88 Mb soit 34% de plus que le résultat de mon calcul.
5°) A quoi est-due cette différence? est-ce la bonne méthode pour procédé à ce type de monitoring ?
J'ai lu pas mal de doc concernant l'organisation des données dans les block oracle et me suis orienté pour comprendre vers le PCTFREE et PCTUSED (respectivement 10 et 0 dans mon cas).
Est-ce qu'un PCTUSED a 0 (qui augmente donc l'espace inutilisé en cas de delete/update de ma table) peut être à l'origine de cette différence?
J'ai également vérifié du coté de mon BLOB (mais il est toujours vide), il est en enable storage in row, mais vu qu'il est vide pour moi il est stocké dans la table et donc pas de soucis de ce coté la normalement.
Si vous avez quelques pistes ou idées sur l'origine de cette espace utilisé ?
Partager