![]() |
|||||||||||||||||||||||||||||||||||||||||||||
|
White Paper Les stored outlines Lors de la migration d’une base d’une version vers la version suivante, ou lors de la copie d’une base sur une autre machine, l’arbre d’exécution des requêtes SQL peut être différent. L’explication de cette modification réside dans les diverses options de chaque base de données, le type d’optimisation choisi (rule ou choose), les statistiques qui diffèrent.
ORACLE 8i apporte la notion de stored outlines qui tente de stabiliser le plan d’exécution et qui consiste en une panoplie de hints pour une requête donnée. A chaque passage de la requête, les mêmes hints seront utilisés, déterminant une probabilité proche de 100% d’employer le même arbre d’exécution dans chaque base si, à cette requête, nous avons associé les hints. Les stored outlines sont très utiles dans un environnement où les requêtes SQL sont optimisées, et où l’on désire que l’arbre d’accès aux données reste immuable (ou presque). En égale mesure, après une analyse du comportement des logiciels compilés qui ne peuvent pas être modifiés, nous pouvons imposer la résolution des requêtes sur le chemin souhaité. Ceci implique une période d’analyse de la shared pool, une reconnaissance des requêtes SQL, l’allocation des directives d’exécution.
Pour implémenter les stored outlines, le paramètre CREATE_STORED_OUTLINES doit être renseigné dans init.ora. En fonction de sa valeur, une catégorie sera créée ou réutilisée. Comme alternative, ce paramètre peut être renseigné au niveau de la session.
CREATE_STORED_OUTLINES =TRUE
Des hints seront créés dans une catégorie ‘DEFAULT’.
CREATE_STORED_OUTLINES =NOM_CATEGORIE
Des hints seront créés dans une catégorie ‘NOM’. Cette option permet de créer différents environnements de prise de mesures des traitements.
L’équivalent au niveau de la session est :
Alter session set CREATE_STORED_OUTLINES =NOM_CATEGORIE; La commande qui permet de créer une outline pour une requête est :
create outline OTL_ACTEUR for category NOM_CATEGORIE on Select NOM, PRENOM FROM acteur where NATION = ‘FR’; Si vous ne nommez pas la outline créée, elle aura un nom système. Si CREATE_STORED_OUTLINES =TRUE dans init.ora, toutes les requêtes se verront allouer des outlines. La commande ‘create outline’ vous donne un contrôle accru des outlines créées dans le cas de l’utilisation de CREATE_STORED_OUTLINES = NOM_CATEGORIE.
Pour utiliser les stored outlines, le paramètre USE_STORED_OUTLINES doit être renseigné dans init.ora. En fonction de sa valeur, une catégorie sera utilisée. Comme alternative, ce paramètre peut être renseigné au niveau de la session. Si USE_STORED_OUTLINES=TRUE, la catégorie DEFAULT sera employée.
Gestion de stored outlines Une outline générée utilisera pour toujours les hints correspondants, même si les tables en question sont ré-analysées. Les outlines peuvent être modifiées :
alter outline OTL_ACTEUR rebuild ;
alter outline OTL_ACTEUR rename to OTL_ACTEUR_FR;
alter outline OTL_ACTEUR change category to DEFAULT;Gestion de stored outlines avec OUTLN_PKG Le package OUTLN_PKG permet quelques manipulations sur les outlines :
execute OUTLN_PKG.DROP_UNUSED ;
execute OUTLN_PKG.DROP_BY_CAT (category_name=>’NOM_CATEGORIE’;
execute OUTLN_PKG.UPDATE_BY_CAT – (old_category_name=>’NOM_CATEGORIE’, new_category_name=>’DEFAULT’); Les stored outlines dans la base Les vues DBA_OUTLINEs et DBA_OUTLINE_HINTS contiennent des informations sur les stored outlines. L’utilisateur OUTLN est le propriétaire des outlines, le déplacement des outlines d’une base vers une autre se fait avec l’export de cet utilisateur.
|
||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||