TP11 - Administration/Tuning MIAGE #3-2006/2007 January 9, 2007 1 Architecture physique d une base Oracle 1.1 La structure physique Une base de données Oracle est composé de fichiers (au sens du système d exploitation de la machine sur laquelle est installée la base). On distingue - les fichiers de données qui contiennent les objets de la base de données: le dictionnaire, les structures de données utilisateurs, les objets proceduraux : triggers, procedure stockées. - les redo log files (fichiers historiques, journaux) qui conserve une trace de l activité transactionnelle, essentiellement dans la perspective d une restauration de toute ou partie de la base après un incident. -lescontrol files contiennent des informations sur la base de données: date de création, noms des fichiers de données, des fichiers journaux, leurs numéros de séquence (pour gérer leur utilisation cyclique)... Dès que la base de données est modifiée (fichier de données supplementaires, changement de support de certains fichiers) ces informations sont consignées dans le control file. Ces informations sont particulierement utiles au démarrage (startup) et à l arrêt de la base (shutdown) Les fichiers de données alloués à la base constitue l espace mémoire dans lequel le SGBDR Oracle installera ses propres structures d information. Oracle se comporte vis à vis de l espace disque qu il lui est alloué comme un système d exploitation. 1.2 L organisation interne d une base Oracle Pour le SGBDR, la base de données se compose de tablespaces. Un tablespace est constitué de plusieurs fichiers physiques (situés éventuellement sur des disques differents). Tout objet d une base de données occupe une partie de l espace de stockage d un des tablespaces). 1
La taille d un objet de la base peut évoluer à l interieur du tablespace (il pourrait résider physiquement sur plusieurs fichiers et pourquoi pas sur plusieurs disques). Les tablespaces peuvent être activés (online) ou désactivés (offline) individuellement 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 exemple en placant tables et index dans différents tablespaces (corespondant à differents 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] 1.3 Structure des TableSpaces Les tablespaces se décomposent en segments (1 segment 1 objet): data segments (tables), index segments, rollback segments, temporary segments. Les segments temporaires ne sont pas crées directement par les users, mais sont générés par le système lorsque celui-ci a besoin d espace de stockage pour réaliser certaines opérations telles que tri ou création d index. Lorsq un objet est crée, le tablespace auquel il est affecté résulte de plusieurs facteurs; -à quels tablespaces, l utilsateur a-t-il accès - quels privil`ges système ont été accordés à cet utilisateur - quelles options a-t-on précisées au moment de la création de l objet Illustration create user x identified by <password> create table A( create table B( default tablespace TA no number(8),... id number(8)...) temporary tablespace TA text varchar2(220)); tablespace TB; quota unlimited on TA quota 10MB on TB; 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é deunouplusieursextends qui correspondent aux zones mémoire allouées aux segments. L initial extend est alloué lorsdela 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 :Lenumé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êmeblocdedonnées. Question 2 Créer la table test11(filler char(1000)). Quel est à votre avis l espace occupé par 1 ligne de cette table? En observant les adresses, relever le nombre de blocs occupés par les lignes de cette table après l insertion de 7 lignes l insertion de 7 lignes supplémentaires 1 Représentation sous forme de chaîne Base64 àpartird Oracle9i 2 An extended rowid has a four-piece format, OOOOOOFFFBBBBBBRRR: OOOOOO: The data object number that identifies the database segment (AAAAao in the example). Schema objects in the same segment, such as a cluster of tables, have the same data object number. FFF: The tablespace-relative datafile number of the datafile that contains the row (file AAT in the example). BBBBBB: The data block that contains the row (block AAABrX in the example). Block numbers are relative to their datafile, not tablespace. Therefore, two rows with identical block numbers could reside in two different datafiles of the same tablespace. RRR: The row in the block. 3
l insertion de 7 lignes supplémentaires 1.5 Paramétres de Stockage Valeur des valeurs des différents paramètres évoqués çi-dessus pour un objet, ou, au niveau d un tablespace, pour les object qui y seront créés sans spécification de paramètres de stockage. Exemple: storage( initial 20MB, next 10MB, minextends 3, maxextends 3, pctincrease 15, freelists 3 3 ). Les paramétres de stockage definis au niveau du tablespace sont adoptés comme paramétres par défaut pour tous les objets crées à l intérieur du tablespace. Il est également possible de mentionner explicitement les paramétres de stockage d un objet lors de sa création. 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? 1.6 La structure des Blocs Oracle La petite unité mémoire composant un segment n est pas l extend mais le bloc. Les blocs correspondent aux unités d échanges de données entre mémoire centrale et mémoire de masse. Quand on crée un objet de la database, on peut au delà des caracteristiques des extends, influer sur la gestion interne les blocs eux-mêmes au travers des paramétres: PCTFREE, PCTUSED. PCTFREE est utilisé pour indiquer le pourcentage du bloc qui ne peut pas être rempli par des insertions dans la table (ce qui veut dire cette partie est reservé pour des mise-à-jour des enregistrements présents dans le bloc. PCTUSED définit le pourcentage d espace qui doit être occupé par des enregistrements avant qu un bloc vierge soit utilisé. Un bloc est divisé en deux parties: l entêtedeblocetlapartiedonnée. L entête contient des informations générales comme: - row directory - répertoire de lignes de la table contenues dans le bloc -transaction directory - répertoire des transactions en cours modifiant le contenu du bloc. La partie données est subdivisée en deux parties: insert area partie destiné à recevoir de nouvelles lignes. free area partie du bloc reverséà l augmentation de taille des articles existants. Cette partie est particulierement importante dans le cas oùlesblocs stockent des données de type VARCHAR (chainedecareact`res de longueur variable) ou VARCHAR2. Pour ces types de données, le système alloué juste la place 3 ce dernier paramétre prend toute son importance lorsque de nombreuses insertions sont 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 peuvent 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. Lafree 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 enregistrements 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ésousleniveaupctused -bloc utiliséaudessusduniveaupctused -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é,lesgbdroracle ira d abord rechercher un bloc libre dans cette liste interne àlatransaction. 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. Utilisation de Enterprise Manager Console Connectez-vous sous l outil d Administration: Question 4 A partir de l item stockage du navigateur, relever les tailles, pourcentages d utilisation, paramètres de stockage des tablespaces System, MIAGE 5
S Table Index Y S T E M Filex FileY Segments Extends Initial Next TableSpaces Header : Row Directory Free Area Blocs de 2 Ko Bloc: Row -- Row -- Row -- Question 5 A partir de l item sécurité/utilisateur, relever les rôles, privilèges système vous concernant en tant que user oracle. Question 6 Que permet le rôle connect 1.7 La commande ANALYZE La commande ANALYZE déclenche l évaluation d indicateurs calculés sur une table; cette évaluation peut être effectuée sur l ensemble de la table (COMPUTE STATISTICS) ou sur une échantillon de lignes (ESTIMATE STATISTICS). Les valeurs de ces indicateurs sont mémorisés dans le dictionnaire de la base. On peut y accéder soit par le biais de programme spécificiques, soit en consultant la vue USER TABLES. ANALYZE TABLE <TABLE_NAME> COMPUTE STATISTICS ; Créer la table suivante : test(no char(3), filler char(97)). Attention: lesvaleurs de l attribut no devront correspondre à des nombres entiers compris entre 0 et 999. Poser sur cette table, au moment de sa création, la contrainte déclarative correspondante. Question 7 Est-ce que la longueur des tuples de cette table est variable? Quelle serait la valeur la plus appropriée pour le paramètre PCTFREE. Parmi les indicateurs de volumétrie qu Oracle peut déterminer sur une table figurent : 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 8 Relever l évolution des ces indices: 1. après la création de la table 2. après insertion de 50 lignes 3. après insertion de 50 lignes supplementaires 4. après insertion de 100 lignes supplementaires Comparer à chaque fois l espace réellement occupé par la table et l espace théoriquement nécessaireà sa mémorisation. Comment expliquer cette différence? Question 9 Faites grossir la table jusqu à ce que vous constatiez l allocation d un nouvel extend à la table. Cela correspond-il aux paramètres de stockage de la table. 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. Question 11 Supprimer l intégralitédeslignes, commiter etregénerezlesstatistiques. Que constatez-vous? Effectuez un truncate table test et regénérez les statistiques. Que constatezvous? 7