LOG660 - Bases de données de haute performance Évaluation et optimisation de requêtes Département de génie logiciel et des TI
Question Laquelle de ces requêtes est la plus performante? Requête 1: SELECT SUM(LC.quantite) FROM LigneCommande LC, Produit P WHERE LC.idProduit = P.idProduit AND P.categorie = imprimante Requête 2: SELECT SUM(LC.quantite) FROM LigneCommande LC WHERE LC.idProduit IN (SELECT idproduit FROM Produit P WHERE P.categorie = imprimante ) Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 2
Évaluation des requêtes relationnelles SQL QUOI Évaluateur de requêtes du SGBD COMMENT en fonction du schéma interne 3
Traitement des requêtes Requête (ex:sql) Décomposition Schéma conceptuel & externe Requête interne Optimisation Schéma interne & statistiques Plan d'exécution Exécution BD Résultats 4
Requête interne Schéma relationnel: Requête SQL: SELECT FROM WHERE <<table>> Livre {Clé prim aire : ISBN} ISBN : CHAR(13) titre : VARCHAR(50) annéeparution : DomaineAnnée nomediteur : VARCHAR(20) code : VARCHAR(10) <<table>> Catégorie {Clé primaire : code} code : VARCHAR(10) descripteur : VARCHAR(20) codeparent : VARCHAR( 10) codeparent titre, descripteur Livre, Catégorie ISBN = 1-111-1111-1 AND Livre.code = Catégorie.code Π titre, descripteur Requête interne: σ ISBN = 1-111-1111-1 Livre Catégorie 5
Coût des opérations physiques La performance d une requête interne est évaluée en fonction: Métrique TempsES : TempsUCT : TailleMC : TailleMS : Description Temps d accès (lectures et écritures) à la mémoire secondaire Temps de traitement de l unité centrale (souvent négligeable par rapport au temps d accès) Espace requis en mémoire centrale Espace requis en mémoire secondaire Dans les systèmes transactionnels: Le principal soucis est de pouvoir traiter les requêtes le plus rapidement possible Les accès disque sont les opérations les plus coûteuses Donc, la principale métrique de performance est TempsES 6
Statistiques d évaluation L estimation du coût des opérations se base sur des statistiques Statistiques d une table T: Statistique N T TailleLigne T FB T FBM T B T Card T (col): Min T (col), Max T (col) Description Nombre de lignes de la table T La taille d'une ligne de la table T Facteur de blocage moyen de T (nombre moyen de lignes contenues dans un bloc) Facteur de blocage maximal de T Estimation :!(TailleBloc-TailleDescripteurBloc )/TailleLigne T " Nombre de blocs de la table T Estimation : #N T / FB T $ Nombre de valeurs distinctes (cardinalité) de la colonne col pour la table T Ex : Card T (sexe) = 2 Valeurs minimale et maximale que peut prendre une colonne col 7
Statistiques d évaluation Statistiques d une expression de sélection par valeur (col = val) ou par intervalle (col [val 1, val 2 ]) : Statistique FacteurSélectivité T (col = val) FacteurSélectivité T (col [val 1,val 2 ]) Sel T (col = val) Description Pourcentage de lignes pour lesquelles la colonne col contient la valeur val Estimation : 1/Card T (col) Pourcentage de lignes pour lesquelles la colonne col contient une valeur comprise entre val 1 et val 2 Estimation : (val 2 - val 1 )/( Max T (col)- Min T (col) ) Nombre de lignes de T sélectionnées par l'expression de sélection. Estimation : FacteurSélectivité T (col) * N T Le facteur de sélectivité est important car il détermine le nombre de blocs à transférer (TempsES) Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 8
Statistiques d évaluation Statistiques d un index I (arbre-b + ): Statistique TailleEntrée I Ordre I OrdreMoyen I Hauteur I Description Taille d'une entrée dans un bloc interne de l'index Approximation : taille de la clé d'index + taille pointeur de bloc Nombre maximum de fils (pointeurs) pour un bloc interne de l'index I Estimation :!(TailleBloc-TailleDescripteurBloc)/TailleEntrée I " Nombre moyen de fils (pointeurs) pour un bloc interne de l'index I Nombre de niveaux dans l'arbre de l'index I Estimation : #log OrdreMoyenI (N T )$ Autres statistiques: Statistique TH T M Description Taille de l'espace d'adressage pour la fonction de hachage Nombre de blocs disponibles en mémoire centrale pour le traitement des opérations Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 9
Maintien des statistiques par le SGBD Dilemme entre la précision des statistiques (menant à une meilleure estimation des coûts) et l effort (temps, cpu) requis pour les générer Types de mise à jour des statistiques: Incrémentale À chaque mise à jour de la table ou de l index Mise à jour en différé Durant les périodes de faible activité (ex: la nuit) Déclenchée par un script Estimation par échantillonnage Pour les tables très volumineuses (ex: pourcentage des lignes) 10
Maintien des statistiques par le SGBD Clause ANALYZE (Oracle) Statistiques complètes: ANALYZE TABLE NomTable COMPUTE STATISTICS Échantillonnage (10 pourcent des lignes): ANALYZE TABLE NomTable ESTIMATE STATISTICS SAMPLE 10 PERCENT 11
Opérations à optimiser 1) Sélection de lignes selon une clé Ex: balayage, index, hashage, etc. 2) Tri des lignes d une table Ex: algorithme tri-fusion 3) Jointure de deux tables Ex: boucles imbriquées, jointure tri-fusion, etc. 12
Sélection d enregistrements Sélection par balayage: On parcourt la table jusqu'à ce qu'on trouve l'enregistrement désiré Lire toute la table dans le pire cas: O(N) Sélection par indexage: On traverse l'index selon la clé de recherche Complexité: O(log(N)) Permet également la sélection par intervalle Sélection par hachage: L'adresse du bloc contenant l'enregistrement est obtenu en appliquant une fonction de hashage sur la clé Complexité: ~O(1) Ne permet pas la sélection par intervalle 13
Balayage de tables (FULL TABLE SCAN) On lit séquentiellement tous les blocs de la table Facteurs à considérer: Le nombre de blocs dans la table Les temps de positionnement de la tête de lecture, dus aux bris de séquence Temps estimé: TempsES (BAL) = B T TempsTrans + NombrePos TempsPosDébut Positionnement #1 Positionnement #2 Positionnement #3 Transfert sans bris de séquence... Transfert sans bris de séquence... Transfert sans bris de séquence... 14
Balayage de tables (FULL TABLE SCAN) Situations où il peut être acceptable de balayer une table: Sur les petites tables: Plus avantageux de lire tous les blocs de la table en mémoire centrale et de faire les opérations (sélection, tri, jointure, etc.) en mémoire centrale Sur les tables intermédiaires: Ex: table retournée par un SELECT imbriqué On ne possède pas d index ou autres structures d optimisation pour ces tables Le balayage est souvent la seule option 15
Exemple : balayage de la table Livre FB Livre = FBM Livre = 20 B Livre = N Livre / FB Livre = 1 000 000/ 20 = 50 000 blocs Meilleur cas (aucun bris de séquence): TempsES (BAL Livre ) = 50,01 secs Pire cas (bris de séquence après chaque lecture de bloc) : TempsES (BAL Livre ) = 9,16 minutes Observations: N Livre 1 000 000 FBM Livre 20 Le balayage de grandes tables est à éviter si possible Le temps de repositionnement peut avoir un impact significatif sur la performance de la requête 16
Sélection par égalité dans un index secondaire (INDEX SCAN) Ex: SELECT * FROM Client WHERE id=1052..................... Hauteur -1 Feuilles à transférer contenant les références aux blocs de l'organisation primaire.................. Blocs de l'organisation primaire à transférer 17
Sélection par égalité dans un index secondaire (INDEX SCAN) Trois groupes de blocs à lire: Blocs internes de l index (traverse de l arbre): (Hauteur I -1) blocs à lire Feuilles de l index (les références): Sel T (cléindex = val) /OrdreMoyen I blocs à lire Blocs de l organisation primaire (les lignes recherchées) Sel T (cléindex = val) blocs à lire Sélection sur une clé unique (ex: clé primaire) Un seul bloc feuille et un seul bloc de l organisation primaire, car une seule ligne (au max.) à récupérer Total de (Hauteur I +1) blocs à lire 18
Exemple: sélection sur clé non unique (facteur de sélectivité faible) Hauteur I = log 66 (1 000 000) = 4 Sel Livre (code = val) N Livre /Card Livre (code) = 250 lignes TempsES (index secondaire) = 2,83 sec Observations: N Livre 1 000 000 FBM Livre 20 Card Livre (code) 4 000 OrdreMoyen I 66 La sélection par index secondaire est nettement plus rapide que le balayage dans ce cas ci (2.8 sec versus 50 sec) 19
Exemple: sélection sur clé non unique (facteur de sélectivité élevé) Hauteur I = log 66 (1 000 000) = 4 Sel Livre (code = val) N Livre /Card Livre (code) = 50 000 lignes TempsES (index secondaire) = 558,37 secs Observations: N Livre 1 000 000 FBM Livre 20 Card Livre (code) 20 OrdreMoyen I 66 La sélection par index secondaire est pire que le balayage (558 sec versus 50 sec)! Comme les lignes se trouvent (potentiellement) dans des blocs différents, il faut repositionner la tête de lecture pour chaque ligne Il est préférable de simplement balayer la table dans ce cas 20
Exemple: sélection sur clé unique (clé primaire ISBN) Hauteur I = log 66 (1 000 000) = 4 TempsES (index secondaire) = (Hauteur I +1) TempsESBloc = 55 ms TempsES (index primaire) = Hauteur I TempsESBloc = 44 ms Observations: N Livre 1 000 000 FBM Livre 20 Card Livre (ISBN) 1 000 000 OrdreMoyen I 66 Un index secondaire est comparable à un index primaire dans le cas d'une clé unique (un seul bloc de plus à lire pour la référence) L'index secondaire est donc préférable pour les clés uniques (Oracle en crée un par défaut sur chaque clé primaire) 21
Balayage vs sélection par index secondaire (N = 1 000 000, FBM =20) temps (ms) Index secondaire Balayage Observations: L index secondaire est préférable au balayage si la colonne de sélection possède plus de 200 valeurs différentes (Card T (col) 200) Oracle recommande de NE PAS créer d index si la sélection peut retourner plus que 15% des lignes (FacteurSélectivité T (col) 15%) Ex: créer un index sur une colonne sexe est une mauvaise idée 22
Taille de l'index secondaire Index secondaire sur la colonne code de Livre (clé non unique) Taille de la table Livre: B Livre = N Livre / FBM Livre = 1 000 000/ 20 = 50 000 blocs Taille de l index (estimée par le nombre de blocs feuilles): B IndexSecondaire = N Livre / OrdreMoyen I = 15 152 blocs Observations: N Livre 1 000 000 FBM Livre 20 Card Livre (code) 4 000 OrdreMoyen I 66 La taille de l index en mémoire secondaire correspond à 30% de la taille de la table indexée! Il faut donc créer des index UNIQUEMENT lorsque pertinent 23
Balayage de l index (FULL INDEX SCAN) Dans les cas où toutes les colonnes souhaitées se trouvent dans la clé de l index Ex: (index sur la colonne idclient d une table Transaction) SELECT idclient, COUNT(*) as nbtransactions FROM Transaction GROUP BY idclient On balaye les blocs feuilles de l index au lieu de balayer les blocs de la table Comme l information est plus compacte dans les feuilles de l index, il y a moins de blocs à lire Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 24
Sélection par égalité avec hachage (HASH SCAN) Stratégie de chaînage en cas de débordement Dans le pire cas, il faut parcourir tous les blocs de l adresse correspondant à la clé de sélection Nombre moyen de blocs à lire (distribution uniforme des lignes): N T / (TH T FB T ) blocs Adresse du paquet 0 1 2 3 TH-1... 25
Exemple: hachage sur ISBN de Livre (HASH cluster Oracle) Cas idéal (sans débordement) Taux de remplissage des blocs TR = 80% FB Livre = 80% FBM Livre = 16 TH Livre = N Livre / FB Livre = 62 500 TempsES (hashage) = 1 000 000/(62 500 16) 11 ms = 11 ms TempsES (index secondaire) = (Hauteur I + 1) 11 ms = 55 ms Observations: N Livre 1 000 000 FBM Livre 20 Dans le cas idéal, la sélection par hashage est optimale car il n y a qu un seul bloc à lire (versus 5 pour l index secondaire) Cependant, la performance peut être affectée par les débordements, si la taille d adressage (paramètre TH) est mal choisie 26
Tri d'une table Plusieurs opérations nécessitent de trier une table: Résultats triés (ORDER BY) Élimination des doubles (DISTINCT) Opérations d agrégation (GROUP BY) Jointure par tri-fusion Si le nombre de blocs en mémoire centrale (M) est grand On lit la table et la trie en mémoire centrale Sinon, si M est petit On doit faire un tri externe de la table (ex: algorithme de trifusion) 27
Algorithme de tri fusion Étape tri On trie la table en mémoire centrale par groupes de M blocs On doit lire et écrire tous les blocs de la table, avec un repositionnement pour chaque groupe de M blocs Coût : 2 ( B T /M TempsPosDébut + B T TempsTrans) Positionnement Positionnement Positionnement Positionnement Lecture Lecture Lecture Lecture 15 4 3 9 18 12 16 2 5 7 14 6 Positionnement Positionnement Positionnement Positionnement Création de 12/3 = 4 groupes Ecriture Ecriture Ecriture Ecriture 3 4 15 9 12 18 2 5 16 6 7 14 28
Algorithme de tri fusion Étape fusion On fusionne récursivement les groupes voisins (triés) jusqu à obtenir un seul groupe contenant tous les blocs Environ log M-1 (B T /M) passes de fusion, chacune demandant un balayage en lecture et écriture de la table Coût : B T (2 log M-1 (B T /M) - 1) TempsESBloc 3 4 15 9 12 18 2 5 16 6 7 14 3 4 9 12 15 18 2 5 6 7 14 16 Passe de fusion #1 produit 4/2 = 2 groupes Passe de fusion #2 produit 2/2 =1 groupe 2 3 4 5 6 7 9 12 14 15 16 18 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 29
Exemple: Tri de la table Livre M = 50 TempsES (tri-fusion) = 29,5 mins N Livre 1 000 000 FBM Livre 20 B Livre 50 000 Observations: Inefficace de trier une grande table lorsqu on possède peu de mémoire centrale (ex: seulement M=50 blocs) Solution alternative: créer un index primaire ou CLUSTER INDEX sur la clé de tri afin que les lignes soient physiquement ordonnées selon cette clé, en mémoire secondaire 30
Jointure de deux tables (R! θ S) Une des opérations ayant le plus d impact sur la performance des requêtes L optimisation des jointure est donc cruciale Principales approches de jointure: Jointure par boucles imbriquées par blocs (BIB) Jointure par boucles imbriquées avec index (BII) Jointure par tri-fusion (JTF) Jointure par hashage (JH) Pré-jointure (PJ) 31
Boucles imbriquées par blocs (NESTED LOOP JOIN) POUR chaque bloc b R de R POUR chaque bloc b S de S POUR chaque ligne l R de b R POUR chaque ligne l S de b S SI θ sur l R et l S est satisfait Produire la ligne concaténée à partir de l R et l S FINSI FINPOUR FINPOUR FINPOUR FINPOUR TempsES (BIB) = B R (TempsESBloc + B S TempsTrans + TempsPosDébut) Variante : Boucles imbriquées multiblocs (BIM) On lit M blocs de R à la fois (au lieu de 1 bloc) Réduit le nombre de repositionnements de la tête de lecture 32
Exemple: BIB sur Livre! Catégorie R=Livre et S=Catégorie: TempsES (BIB) = 100,83 mins R = Catégorie et S = Livre: TempsES (BIB) = 83,37 mins Si S est lue une seule fois en mémoire centrale: TempsES (BIB) = 50,1 sec Observations: N Catégorie 4 000 FB Catégorie 40 B Catégorie 100 N Livre 1 000 000 FB Livre 20 B Livre 50 000 Légèrement avantageux de mettre la plus petite table dans la boucle externe (83,37 mins vs 100,83 mins) Gain important de performance si la table de la boucle interne peut être mise en mémoire (aucune relecture) 33
Boucles imbriquées avec index (NESTED LOOPS with index) Comme BIB, sauf que les lignes la table interne sont obtenues à l aide d un index (au lieu d un balayage) POUR chaque ligne l R de R POUR chaque ligne l S de S satisfaisant θ (sélection en utilisant un index) Produire la ligne concaténée à partir de l R et l S FINPOUR FINPOUR TempsES (BII) = B R TempsESBloc + N R TempsES (index secondaire) Exige d avoir un index sur la colonne de jointure de la table située dans la boucle interne 34
Exemple: BII sur Livre! Catégorie R=Livre et S=Catégorie TempsES (index secondaire sur Catégorie.code) = 55 ms TempsES (BII) = B Livre TempsESBloc + N Livre TempsES (index sec.) = 15,43 hrs R = Catégorie et S = Livre TempsES (index secondaire sur Livre.code) = 2827 ms TempsES (BII) = B Catégorie TempsESBloc + N catégorie TempsES (index sec.) = 3,14 hrs N Catégorie 4 000 FB Catégorie 40 B Catégorie 100 N Livre 1 000 000 FB Livre 20 B Livre 50 000 Observations: La sélection par index n est pas tellement affectée par la taille de la table Il faut donc TOUJOURS mettre la plus grande table dans la boucle interne de la jointure BII (ex: table Livre dans ce cas) 35
Contexte avantageux pour BII L algorithme BII est très avantageux lorsqu une des tables est beaucoup plus petite que l autre Ex: la table produite par la sélection de la table Livre à l aide d une clé primaire (ne contient qu une seule ligne) Dans ce cas, l algorithme BII n exige qu une seule sélection par index (table Catégorie dans la boucle interne) σ ISBN = 1-11-111-1111-1 ( S é l e c t i o n p a r i n d e x s e c o n d a i r e s u r I S B N ) Livre Π titre, descripteur (Balayage) (Boucle imbriquée avec index secondaire sur code de la table interne Catégorie) Catégorie 36
Jointure par tri-fusion (SORT MERGE JOIN) On trie les tables R et S, et on les fusionne en faisant un balayage synchronisé dans les tables triées On joint les groupes de lignes ayant la même valeur pour la clé Trier R et S par tri externe et réécrire dans des fichiers temporaires Lire groupe de lignes G R (c R ) de R pour la première valeur c R de clé de jointure Lire groupe de lignes G S (c S ) de S pour la première valeur c S de clé de jointure TANT QUE il reste des lignes de R et S à traiter SI c R = c S Joindre chaque paire de lignes G R (c R ) et G S (c S ); Lire les groupes suivants G R (c R ) de R et G S (c S ) de S; SINON SI c R < c S Lire le groupe suivant G R (c R ) de R; SINON SI c R > c S Lire le groupe G S (c S ) suivant dans S; FINSI FIN TANT QUE TempsES (JTF) = TempsES (TRI R ) + TempsES (TRI S ) + 2 (B R + B S ) TempsESBloc Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 37
Exemple: JTF sur Livre! Catégorie N Catégorie 4 000 FBM Catégorie 40 B Catégorie 100 TempsES(TRI Catégorie ) 1 340 ms M = 50 TempsES (JTF) = TempsES (TRI Livre ) + TempsES (TRI Catégorie ) + 2 (B livre +B Catégorie ) TempsESBloc = 2 874 secs TempsES (BIM) = 150 secs (Catégorie dans la boucle externe) Observations: N Livre 1 000 000 FBM Livre 20 B Livre 50,000 TempsES(TRI Livre ) 1 770 000 ms La jointure BIM est plus performante, même si sa complexité moyenne est pire que celle de JTF Explication: une des tables est petite (table Catégorie), ce qui correspond au cas avantageux pour BIM (ou BII) 38
Exemple 2: 100 fois plus de Catégories N Catégorie 400 000 FBM Catégorie 40 B Catégorie 10 000 TempsES(TRI Catégorie ) 350 000 ms M = 50 N Livre 1 000 000 FBM Livre 20 B Livre 50,000 TempsES(TRI Livre ) 1 770 000 ms TempsES (JTF) = 3 444 secs TempsES (BIM) = 10 464 secs M = 10 TempsES (JTF) = 6 180 secs TempsES (BIM) = 62 535 secs Observations: Lorsque les deux tables sont grandes, JTF est plus performante que BIM, surtout lorsqu il y a peu d espace en mémoire centrale (M est petit) 39
Jointure par hachage (HASH JOIN) Étape 1: partition des tables {Partitionner R par hachage} POUR chaque ligne l R de R Ajouter l R au paquet R i, où i = h(clé de l R ) Chaîner un nouveau bloc s'il y a débordement FINPOUR {Partitionner S par hachage} POUR chaque ligne l S de S Ajouter l S au paquet S i, où i = h(clé de l S ) Chaîner un nouveau bloc s'il y a débordement FINPOUR Étape 2: jointure des lignes dans les paquets de même adresse POUR chaque paquet R i POUR chaque ligne l R de R i Joindre l R avec les lignes de S i ayant la même valeur pour la clé de jointure FINPOUR FINPOUR TempsES (JH) = TempsES (BAL R ) + TempsES (BAL S ) + 2 (B R + B S ) TempsESBloc 40
Exemple: JH sur Livre!Catégorie N Catégorie 400 000 FB Catégorie 40 B Catégorie 10 000 TempsES (BAL Catégorie ) 10 010 ms N Livre 1 000 000 FB Livre 20 B Livre 50 000 TempsES (BAL Livre ) 50 010 ms M = 50 TempsES (JH) = 2 700 secs TempsES (JTF) = 3 444 secs TempsES (BIM) = 10 464 secs (R = Catégorie) Observations: Sauf si une des tables est déjà triée, JH est un peu plus rapide que JTF 41
Pré-jointure par une organisation en grappe hétérogène (CLUSTER JOIN) Les deux tables à joindre sont organisées dans une même grappe (cluster) hétérogène, selon la clé de jointure Ex: Client et Compte dans une même grappe selon la clé idclient Les tables sont physiquement jointes dans la grappe Ex: grappe Client! Compte (égalité sur idclient) Il suffit de balayer séquentiellement les blocs de la grappe: TempsES (PJ) = TempsES (BAL R ) + TempsES (BAL s ) Optimal en théorie, car un seul balayage des tables à faire, mais la fragmentation interne peut nuire aux performances 42
Exemple: PJ sur Livre! Catégorie N Livre 1 000 000 FB Livre 20 B Livre 50 000 TempsES (BAL Livre ) 50 010 ms N Catégorie 4 000 FB Catégorie 40 B Catégorie 100 TempsES (BAL Catégorie ) 110 ms On suppose que les tables Livre et Catégorie sont organisées dans une même grappe, selon la clé code TempsES (PJ) = 50 secs TempsES (BIM) = 150 secs (R = Catégorie, M = 50) Observations: PJ est trois fois plus rapide que BIM, même si l une des tables est beaucoup plus petite que l autre Pas toujours le cas en pratique 43
Comparaison des méthodes de jointure BIB / BIM (NESTED LOOPS JOIN) Lorsqu une des deux tables à joindre (ou les deux) est petite et peut être lue en mémoire centrale BII (NESTED LOOPS INDEX JOIN) Lorsqu une des tables est beaucoup plus petite que l autre et qu on possède un index secondaire sur la clé de jointure de la plus grande table La plus grande table est mise dans la boucle interne, et le coût de sélection de ses lignes est amorti par l index 44
Comparaison des méthodes de jointure JTF (SORT MERGE JOIN) Lorsqu on doit joindre deux grandes tables Permet également les jointures sur des conditions d inégalité Avantageux lorsqu une des tables (ou les deux) est déjà triée (ex: index primaire sur la table ou tri provenant d une opération en amont) Note: l étape de tri peut être accélérée à l aide d un FULL INDEX SCAN sur un index de la clé de jointure (la clé déjà triée dans l index) JH (HASH JOIN) Lorsqu on doit joindre deux grandes tables Permet seulement les jointures sur des conditions d égalité Avantageux lorsqu une des tables (ou les deux) est déjà organisée dans une grappe homogène (single table hash cluster) selon la clé de jointure 45
Comparaison des méthodes de jointure PJ (CLUSTER JOIN) Optimal en théorie, mais peut parfois nuire à l exécution: Fragmentation importante de la mémoire secondaire Ralentit le balayage d une table dans la grappe (car les lignes de la table sont plus distantes les unes des autres) Donc détériore la performance dans la situation ou le balayage est privilégié 46
Optimisation Chercher le meilleur plan d exécution? Beaucoup trop de possibilités en pratique Solution approchée à coût raisonnable Générer un nombre limité d alternatives prometteuses Heuristiques (ex: ordre des sélections, projection, jointures, etc.) Choisir la meilleure Estimation approximative du coût d exécution 47
Plans d'exécutions équivalents Plusieurs arbres algébriques équivalents Π titre, descripteur Π titre, descripteur σ ISBN = 1-111-1111-1 σ ISBN = 1-111-1111-1 Catégorie Livre Catégorie Livre 48
Règles d équivalences d algèbre relationnelle Eclatement d'une sélection conjonctive (SE) σ e1 ET e2 (T) = σ e1 (σ e2 (T)) Commutativité de la sélection (SC) σ e1 (σ e2 (T)) = σ e2 (σ e1 (T)) Elimination des projections en cascades (PE) π liste1 (π liste2 (T)) = π liste1 (T) Commutativité de la jointure (JC) T 1! T 2 = T 2! T 1 Associativité de la jointure (JA) T 1! (T 2! T 3 ) = (T 1! T 2 )! T 3 49
Règles d équivalences d algèbre relationnelle (suite) Commutativité restreinte de la sélection et de la jointure (CSJ) σ e (T 1! T 2 ) = σ e (T 1 )! T 2 Si l'expression de sélection e ne contient que des colonnes de T 1 Commutativité restreinte de la projection et de la sélection (CPS) π listecol (σ e (T)) = π listecol (σ e (π (listecol col de e) T)) Commutativité restreinte de la projection et de la jointure (CPJ) etc. π listecol (T 1! T 2 ) = π listecol (π (listecol col de T1) (T 1 )! π (listecol col de T2) (T 2 )) 50
Plusieurs plans d exécution pour un arbre algébrique Pour chaque opération logique Plusieurs choix d opérations physiques Π titre, descripteur (Balayage) Π titre, descripteur (Balayage) Π titre, descripteur (Balayage) σ ISBN = 1-111-1111-1 (Balayage) σ ISBN = 1-111-1111-1 (Balayage) σ ISBN = 1-111-1111-1 (Balayage) (Jointure par tri-fusion) (Jointure par BIM) (Jointure par hachage) Livre Catégorie Livre Catégorie Livre Catégorie etc. 51
Mise en oeuvre par matérialisation Π titre, descripteur(balayage) σ annéeparution = 2000 (Boucle imbriquée par index secondaire sur code de la table interne Catégorie) Catégorie (Sélection par index secondaire sur annéeparution) Matérialisation: On exécute les opérations depuis les feuilles vers la racine de l arbre algébrique Chaque opération produit une table intermédiaire Désavantages: On doit écrire les tables intermédiaires sur disque si elles sont volumineuses (coût additionnel) On ne possède pas d index sur les tables intermédiaires, donc les opérations sur ces tables sont coûteuses Livre 52
Mise en oeuvre par pipeline Π titre, descripteur (Balayage) σ annéeparution = 2000 (Boucle imbriquée par index secondaire sur code de la table interne Catégorie) Catégorie (Sélection par index secondaire sur annéeparution) Pipeline: Chaque ligne traverse toutes les opérations sans être écrite dans une table temporaire Avantage: Aucune écriture supplémentaire Désavantage: Pas adapté à toutes les opérations Ex (tri): on doit trier toutes les lignes en même temps En pratique: On utilise le pipeline si possible, et la matérialisation sinon Livre 53
Heuristiques d'optimisation Élaguer l espace des solutions Solutions non applicables Exemples d heuristiques Sélections le plus tôt possible Projections le plus tôt possible Les jointures plus restrictives en premier Jointures supportées par index, hachage ou grappe en premier 54
Optimisation par coût Minimiser le coût (ex: temps d exécution) Stratégies Programmation dynamique Amélioration itérative Recuit simulé Algorithme génétique etc. 55
Estimation du coût d'un plan d'exécution Π titre, descripteur (Balayage TempsES = 11 ms) (Ecriture du résultat TempsES = 11 ms) σ ISBN = 1-111-1111-1 (Balayage TempsES = 92 314 ms) Coût total = 3 812 040ms (Ecriture du résultat TempsES = 846 164 ms) (Jointure par tri-fusion TempsES = 2 873 540 ms) TempsES(Plan avec pipeline) = TempsES (JTF Livre!Catégorie ) = 2 873 540 ms Livre Catégorie 56
Autre exemple Π titre, descripteur (Balayage TempsES = 11 ms) (Ecriture du résultat TempsES = 11 ms) (Boucle imbriquée par index secondaire sur code de la table interne Catégorie TempsES = 44ms) Coût total = 132ms σ ISBN = 1-111-1111-1 Livre Catégorie (Ecriture du résultat TempsES = 11ms) (Sélection par index secondaire sur ISBN TempsES = 55ms) TempsES(Plan avec pipeline) = TempsES(S=IS pour index sur ISBN) + N σ ISBN=1-11-111-1111 (Livre) * TempsES(S=IS sur code de Catégorie) = 55 ms + 33 ms = 88 ms 57
Types d optimisation Oracle COST (statistique): minimise le coût estimé Besoin de statistiques (ANALYSE) Plus cher à calculer mais donne de meilleurs plans d exécution Mode ALL_ROWS Minimise le temps total Ex: on préfère JTF à BIM pour joindre deux grandes tables Mode FIRST_ROWS Minimise temps de réponse (obtention des premières lignes) Ex: on préfère BIM à FTH pour joindre deux grandes tables Utilisé dans les applications interactives où l utilisateur n a pas besoin de voir simultanément toutes les lignes d une requête RULE (heuristique) Utilisé seulement lorsque des statistiques ne sont pas disponibles 58
Optimisation heuristique Oracle mode RULE Rang Chemin d'accès 1 Sélection par ROWID 2 Sélection d'une ligne par jointure dans une organisation par index groupant ou hachage hétérogène (CLUSTER) 3 Sélection d'une ligne par hachage sur clé candidate (PRIMARY ou UNIQUE) 4 Sélection d'une ligne par clé candidate 5 Jointure par une organisation par index groupant ou hachage hétérogène (CLUSTER) 6 Sélection par égalité sur clé de hachage (HASH CLUSTER) 7 Sélection par égalité sur clé d'index groupant (CLUSTER) 8 Sélection par égalité sur clé composée 9 Sélection par égalité sur clé simple d'index secondaire 10 Sélection par intervalle borné sur clé indexée 11 Sélection par intervalle non borné sur clé indexée 12 Tri-fusion 13 MAX ou MIN d'une colonne indexée 14 ORDER BY sur colonne indexée 15 Balayage 59
Changement du mode pour une session ALTER SESSION SET OPTIMIZER_GOAL = RULE ALL_ROWS FIRST_ROWS CHOOSE 60
Indices d'optimisation (hints) Suggère des techniques d optimisation à SGBD pour une requête particulière Sert en mode de conception ou lorsque l optimiseur ne choisit pas un plan optimal (ex: mauvaises statistiques) Exemple 1: Forcer l utilisation du mode d optimisation RULE SELECT /*+ RULE*/ nom FROM Client WHERE noclient = 10 ; Exemple 2: Forcer l utilisation de l index secondaire pour les sélections sur la colonne index_sexe de Employé (mauvaise idée) SELECT /*+ INDEX(EMPLOYÉ INDEX_SEXE)*/ nom, adresse FROM EMPLOYÉ WHERE SEXE = F 61
Optimisation dans SQL Developper Mode AUTOTRACE Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 62
Optimisation dans SQL Developper Plan d exécution: OPERATION Nom de l opération du plan d exécution (ex : NESTED LOOPS, HASH JOIN) COST LAST_CR_BUFFER_GETS LAST_ELAPSED_TIME LAST_STARTS Coût de l opération estimé par l optimiseur de requête Nombre de blocs lus de la cache pour chaque opération, lors de la dernière exécution Temps (en microsecondes) passé dans chaque opération, lors de la dernière exécution Nombre de fois qu une opération a été faite lors de la dernière exécution Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 63
Optimisation dans SQL Developper Statistiques d exécution (liste partielle): consistent gets physical reads redo size bytes sent bytes received Nombre de blocs lus en mémoire centrale après accès éventuel au disque Nombre de lectures effectives sur le disque (en blocs) Le nombre d octets générés pour le journal permettant de refaire l opération (redo log) Le nombre d octets envoyés de la BD au client par le réseau. Le nombre d octets envoyés du client à la BD par le réseau Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 64
Oracle SQL Tuning Advisor Source: Oracle Database 2 Day + Performance Tuning Guide 11g Release 1 (11.1) Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 65