Professional Documents
Culture Documents
MIAGE #3 - 2006/2007
January 9, 2007
1
La taille d’un objet de la base peut évoluer à l’interieur du tablespace (il pour-
rait résider physiquement sur plusieurs fichiers et pourquoi pas sur plusieurs
disques).
Les tablespaces peuvent être activés (online) ou désactivés (offline) individuelle-
ment pour d’éventuelles opérations de maintenance. Les objets d’un tablespace
offline ne sont plus accessibles, sans que cela ne perturbe l’accès aux objets des
autres tablespaces.
L’interêt d’une telle structuration:
- amélioration de la tolérance aux pannes disque: affecter les fichiers de données
d’un même disque (ou d’un même contrôleur de disque) à une même tablespace
permet de réduire l’impact d’une panne à un seul tablespace.
- Amélioration des performances- diminution des contentions disques- par exem-
ple en placant tables et index dans différents tablespaces (corespondant à differ-
ents disques). Un placement judicieux des tables et index dans les tablespaces
en fonction de leurs utilisations peut influer sur les performances globales du
système.
Les tablespaces peuvent être étendus par allocation de nouveaux fichiers auprès
du système d’exploitation de la machine serveur.
Le tablespace SYSTEM est nécessaire au fonctionnement d’une BD Oracle, il
contient notamment le dictionnaire de la base.
create tablespace <nom>
datafile <chemin/nom> size XXXM
default storage(....)
[online|offline]
2
1.4 Structure des segments
Dans le souci d’éviter ou au moins de minimiser la fragmentation des segments,
le système permet (au DBA) de contrôler l’allocation et l’utilisation de l’espace
mémoire par l’ajustement de ce qu’on appelle les paramètres de stockage.
Une segment est constitué de un ou plusieurs extends qui correspondent aux
zones mémoire allouées aux segments. L’initial extend est alloué lors de la
création du segment (i.e de l’objet). Les next extends sont générés par le système
dès que l’espace n’est plus suffisant pour prendre en compte les changements
apportés au niveau de l’objet. Il est également possible de définir la taille des
extends (initial, et first next) ainsi que le facteur de croissance d’un extend par
rapport au dernier alloué. Chaque extend est constitué de blocs contigus (1 bloc
∼
= 8Ko).
A Chaque ligne d’une table est assignée un ROWID qui correspond à l’adresse
physique de la ligne: block.row.file en représentation hexadécimale 1 : Le numéro
du bloc dans le fichier, le numéro de la ligne dans le bloc, le numero du fichier.
Les rowid sont utilisés dans la constitution des index (pointeur de la ligne). Le
rowid est le mode d’accès le plus direct à une ligne - accès direct.
En terme d’efficacité on ne peut faire mieux que select * from T where rowid
= ’OOOOOOFFFBBBBBBRRR’2
Question 1 Faı̂tes le constat que toutes vos tables sont situés dans le même
tablespace.
Faı̂tes le constat que la plupart de vos tables sont toute entière contenues dans
un même bloc de données.
3
• l’insertion de 7 lignes supplémentaires
Question 3 Les paramètres de stockage des tables peuvent être consultés par
le biais de la vue du dictionnaire USER TABLES.
Constater par le biais d’une requête sur USER TABLES, que toutes vos tables ont
les mêmes paramètres de stockage. Les quels ?
réalisés en parallèle dans une table. Dans ce cas ce paramétre peut être supérieur à 1
4
néceéssaire au stockage de la valeur courante; des mise-à-jour ultérieurse peu-
vent donc augmenter de façon très significative la taille des enregistrements. De
telles variations de taille peuvent également intervenir lors de mises-à-jour de
valeurs NULL. La free area est là pour assurer autant que faire se peut que la
taille d’un enregistrement puisse augmenter tout en restant dans le même bloc.
Si la free area n’est pas suffisamment grande pour qu’on puisse pratiquer l’opération
de mise-à-jour, alors la totalité de l’enregistrement est déplacé dans un autre
bloc. Cet enregistrement reste lié (chaı̂né) à son bloc d’origine. Cela n’entraine
donc aucune mise-à-jour des index correspondants.
Le second paramètre important est PCTUSED, il assure que les blocs seront
occupés de la façon la plus égalitaire que possible. En effet, les nouveaux en-
registrements seront inscrits dans des blocs - qui n’ont pas encore atteint le
niveau d’occupation PCTUSED- ou qui par suite d’opérations de mise-à-jour
sont tombés sous ce niveau d’occupation. Tous les blocs qui rentrent dans cette
catégorie sont intégrés à la liste des blocs “libres”, c’est-à-dire disponible pour
des opérations d’insertion. Néanmoins un bloc ne sera choisi que s’il dispose de
suffisammment de place. Dès que la limite PCTUSED est de nouveau atteinte,
le bloc est retiré de la liste des blocs libres.
Les blocs de données peuvent donc être dans l’une des trois situations suivantes;
-bloc utilisé sous le niveau PCTUSED
-bloc utilisé au dessus du niveau PCTUSED
-bloc alloué à l’extend et non utilisé
L’espace libéré par une suppression ou une mise-à-jour ne devient disponible
qu’une fois la transaction achevée. Cela signifie que, pour respecter l’exécution
d’une transaction, la liste des blocs libres doit être regardée sous deux angles:
la liste des blocs libres du segment, et en complément une liste additionnelle des
blocs descendus sous le PCTUSED durant la transaction. Si dans le courant
de la même transaction, un ordre d’insertion est exécuté , le SGBDR Oracle
ira d’abord rechercher un bloc libre dans cette liste interne à la transaction.
Si l’espace réclamé excéde celui disponible au travers de la free list interne à
la transaction , le système a alors recours à la free list du segment, s’il s’avère
que l’opération n’est toujours pas possible , alors on va puiser dans les blocs
inutilisés du segment (qui rentrent alors dans la free list). Si cela n’est pas
possible non plus, alors le système générera un nouvel extend de taille next +
(next*pctincrease/100.
Les opérations d’insertion font un usage intensif du mécanisme de free list, de
sorte qu’il peut apparaitre comme une bonne idée , lorsque les tables font l’objet
de nombreuses insert parallèles, de créer plusieurs free lists.
5
S Table Index
Y
Filex
S
T Segments
FileY
E
M
Extends
Initial Next
Bloc:
Row --
Row --
Row --
6
1. NUM ROWS : nombre de lignes
2. BLOCKS : nombre de blocs utilisés
3. EMPTY BLOCKS : nombre de blocs alloués, mais non utilisés
4. AVG SPACE : espace libre moyen dans les blocs utilisés
5. AVG ROW LEN : longueur moyenne des lignes
Ces informations sont (ré)évaluées par la commande analyze table nom table
compute statistics. Elles sont accessibles notamment dans la vue USER TABLES.
On pourra aussi les consulter par le biais de DBA-Studio en se positionnant sur
la table (item schéma/user/table du navigateur).
Question 10 Supprimer les 1/3 des lignes de cette table (ceux dont le no est
divisible par 3).
Réévaluer les statistiques sur cette table à l’issue de cette opération.
En déduire quelques éléments sur la stratégie d’allocation des blocs à une table
par le SGBDR Oracle.