Optimisation de base oracle

Disponible uniquement sur Etudier
  • Pages : 23 (5664 mots )
  • Téléchargement(s) : 0
  • Publié le : 2 avril 2011
Lire le document complet
Aperçu du document
L’optimisation des applications
Historique de l’optimiseur d’Oracle. L’optimisateur syntaxique
Avant la version 7.0, l’optimiseur syntaxique (rule-based optimizer) se contentait d’optimiser le code en utilisant un ensemble de règles internes fixes et en les appliquant à partir d’une analyse syntaxique du code : • Règle n° 1 : Lecture des lignes isolées à l’aide du ROWID. (Cette règle posaitproblème lorsque les tables étaient réorganisées ou lorsque la base était portée sous Oracle8, impliquant un changement de format du ROWID). …………. Règle n° 8 : Accès par l’intermédiaire d’un index composite avec toutes les clés contenues dans la clause where. Règle n° 9 : Accès par l’intermédiaire d’un index sur une colonne. Règle n° 10 : Accès par l’intermédiaire d’un index composite, avec préfixesde clés contenus dans la clause where. …………. Règle n° 15 : Balayage complet de la table.

• • • • • •

Dans le principe, pour traiter une instruction, l’optimiseur commençait à la fin de la liste, par exemple la règle n° 15, puis il remontait dans la liste. S’il trouvait un index, il décidait d’appliquer la règle n° 8 ou n° 9, etc.… L’hypothèse de base était la suivante : à partir du moment oùune instruction SQL validait une règle, et que le numéro de la règle diminuait, le plan d’exécution était réputé meilleur. C’est à ce niveau que l’optimiseur syntaxique atteignait ses limites, incapable de déterminer la méthode la moins coûteuse, dans la mesure où il ne faisait usage d’aucun type de fonction de coût ou de statistiques. Cependant, il avait été initialement conçu pour les BDDtransactionnelles, car les Datawarehouses n’existaient pas encore.

L’optimiseur statistique
Il apparaît avec la version 7.0 d’Oracle, dans le but de permettre l’utilisation d’un plus grand nombre d’options lors de la construction des plans d’exécution du code SQL, mais il lui aura fallu sept ans pour atteindre un niveau de maturité satisfaisant. Dès Oracle 7.3, l’optimiseur avait la possibilité degénérer et d’enregistrer des histogrammes de colonnes, fonctionnalité capable de déterminer la distribution effective des données pour une colonne particulière. L’initialisation des paramètres de l’optimiseur Le paramètre OPTIMIZER_MODE configure l’instance Oracle. Sa valeur par défaut (si elle n’est pas explicitée dans le fichier init.ora) est CHOOSE, nécessaire pour l’optimisation statistique.La valeur RULE correspond à l’optimisation syntaxique. Jusqu’à la 8i, deux autres valeurs sont également possibles : FIRST_ROWS et ALL_ROWS. Pour modifier ce paramètre au niveau session, entrer la commande suivante : Alter session set OPTMIZER_MODE=FIRST_ROWS ;

Les Hints Un hint est une indication placée dans une requête pour orienter le plan d’exécution. Il ressemble beaucoup à un commentaire,à l’exception du + placé après le /*. Il est très important de placer le hint à l’emplacement approprié du code SQL, idéalement avant la référence à la première colonne du code SQL. Select /*+ FIRST_ROWS */ last_name, hire_date, salary From EMP Where mgr_id = 12; Si vous incluez un hint incorrect, il sera tout simplement ignoré par l’optimiseur, sans affichage de la moindre erreur.

Queloptimiseur est utilisé ?
Si le paramètre OPTIMIZER_MODE est positionné à CHOOSE, c’est la présence de statistiques dans le dictionnaire qui détermine si l’optimiseur statistique est utilisé. En l’absence de statistiques pour l’ensemble des objets du code SQL, c’est l’optimisation syntaxique qui sera appliquée. Si la table est dotée d’un niveau de parallélisme, l’optimiseur statistique sera utilisé,même en l’absence de statistiques. Il est important que les statistiques soient générées pour tous les objets dans tous les schémas. En effet, la présence de statistiques partielles pour une instruction select peut amener le processus serveur à évaluer des statistiques sur des objets qui n’en disposent pas. Ce type d’échantillonnage de stat réalisé au cours de l’exécution n’est pas enregistré de...
tracking img