Évaluation et optimisation de requêtes



Documents pareils
ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Optimisation SQL. Quelques règles de bases

Évaluation et optimisation de requêtes

TP Bases de données réparties

Le Langage De Description De Données(LDD)

Optimisations des SGBDR. Étude de cas : MySQL

Oracle 11g Optimisez vos bases de données en production (ressources matérielles, stockage, mémoire, requêtes)

Encryptions, compression et partitionnement des données

Structure fonctionnelle d un SGBD

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Administration de Bases de Données : Optimisation

Le langage SQL Rappels

Langage SQL : créer et interroger une base

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Bases de Données relationnelles et leurs systèmes de Gestion

Systèmes de Gestion de Bases de Données (SGBD) relationnels Maude Manouvrier

Le Langage SQL version Oracle

Introduction aux SGBDR

Du 10 Fév. au 14 Mars 2014

Bases de Données. Plan

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Cours Bases de données

Session S12 Les bases de l optimisation SQL avec DB2 for i

ORACLE TUNING PACK 11G

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

TP11 - Administration/Tuning

Cours Bases de données 2ème année IUT

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Les bases de l optimisation SQL avec DB2 for i

Présentation du module Base de données spatio-temporelles

Auto-évaluation Oracle: cours de base

Systèmesdegestionde. basesdedonnées

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Optimisation de MySQL

1 Introduction et installation

Les bases de données

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Les bases de données Page 1 / 8

Notes de cours : bases de données distribuées et repliquées

Sauvegarde collaborative entre pairs Ludovic Courtès LAAS-CNRS

Bases de données et sites WEB Licence d informatique LI345

Bases de données avancées Introduction

Devoir Data WareHouse

Mise en oeuvre TSM 6.1

Administration des bases de données relationnelles Part I

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Programmation parallèle et distribuée

MODE OPERATOIRE OPENOFFICE BASE

Bases de données réparties: Fragmentation et allocation

Module BDR Master d Informatique (SAR)

CYCLE CERTIFIANT ADMINISTRATEUR BASES DE DONNÉES

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

SYSTÈME DE GESTION DE FICHIERS

Compte-rendu de projet de Système de gestion de base de données

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

16H Cours / 18H TD / 20H TP

Cours 6. Sécurisation d un SGBD. DBA - M1ASR - Université Evry 1

Plan d Exécution Graphique pour des Requêtes SQL Simples

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Chapitre 10. Architectures des systèmes de gestion de bases de données

A QUOI SERVENT LES BASES DE DONNÉES?

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Bases de données et sites WEB

Bases de données relationnelles

Implémentation des SGBD

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

Année Universitaire 2009/2010 Session 2 de Printemps

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Partie 0 : Gestion des tablespace et des utilisateurs... 3

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Audit activité base Oracle / SAP

Parallel Execution. IS-Net 29 DATA WEBHOUSE. Informatique de gestion et systèmes d information

Chapitre 1 : Introduction aux bases de données

PHP 5. La base de données MySql. A. Belaïd 1

4D v11 SQL Release 5 (11.5) ADDENDUM

//////////////////////////////////////////////////////////////////// Administration bases de données

Administration des bases de données. Jean-Yves Antoine

Programmation parallèle et distribuée

Sybase Adaptive Server Enterprise 15

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Hibernate vs. le Cloud Computing

Master Exploration Informatique des données DataWareHouse

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Bases de Données Avancées

Bases de Données Avancées

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Transcription:

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