39
Introduction à l'optimisation des bases de données Stéphane Crozat stph.scenari-community.org/bdd opt1.pdf 30 janvier 2018 Paternité - Partage des Conditions Initiales à l'Identique : http://creativecommons.org /licenses/by-sa/4.0/fr/

Introduction à l'optimisation des bases de données · Introduction à l'optimisation des bases de données Stéphane Crozat stph.scenari-community.org/bdd opt1.pdf Paternité -

Embed Size (px)

Citation preview

  • Introduction l'optimisation des bases

    de donnes

    Stphane Crozat

    stph.scenari-community.org/bddopt1.pdf

    30 janvier 2018Paternit - Partage des Conditions Initiales l'Identique : http://creativecommons.org/licenses/by-sa/4.0/fr/

  • Table des matires

    I - Cours 4

    1. Introduction l'optimisation du schma interne ............................................................................................. 4

    1.1. Schma interne et performances des applications ......................................................................................................................... 41.2. valuation des besoins de performance ....................................................................................................................................... 51.3. Indexation .................................................................................................................................................................................... 61.4. Exercice ....................................................................................................................................................................................... 71.5. Dnormalisation .......................................................................................................................................................................... 71.6. Les trois principes respecter pour introduire de la redondance dans une base de donnes .......................................................... 81.7. Exercice ....................................................................................................................................................................................... 81.8. Partitionnement de table ............................................................................................................................................................... 91.9. Exercice ..................................................................................................................................................................................... 111.10. Vues concrtes ......................................................................................................................................................................... 111.11. Complment: Groupement de tables ........................................................................................................................................ 12

    2. Mcanismes d'optimisation des moteurs de requtes .................................................................................... 12

    2.1. Exercice: Calcul du cot d'une requte ...................................................................................................................................... 122.2. Principe de l'optimisation de requtes ......................................................................................................................................... 132.3. Techniques pour l'optimisation de requtes ................................................................................................................................. 132.4. Collecte de statistiques pour le moteur d'optimisation .................................................................................................................. 142.5. Jointures et optimisation de requtes ........................................................................................................................................... 15

    3. Analyse et optimisation manuelle des requtes ............................................................................................. 15

    3.1. Analyse de cots de requtes (EXPLAIN) .................................................................................................................................. 153.2. Exemple de plans de requtes ..................................................................................................................................................... 183.3. Optimisation manuelle des requtes ............................................................................................................................................ 18

    4. Synthse: L'optimisation .............................................................................................................................. 19

    5. Bibliographie commente sur l'optimisation ................................................................................................. 19

    II - Exercices 20

    1. Exercice: Film concret ................................................................................................................................. 20

    2. Exercice: Super-lents ................................................................................................................................... 20

    3. Exercice: Explications ................................................................................................................................. 21

    III - Devoirs 24

    1. Exercice: Big Brother is Watching You ....................................................................................................... 24

    Contenus annexes 26

    Questions de synthse 28

    Solutions des exercices 30

  • Abrviations 37

    Bibliographie 38

    Webographie 39

  • Cours

    4

    La conception des SGBDR exige qu'une attention particulire soit porte la modlisation conceptuelle, afin de parvenir dfinir des modles logiques relationnels cohrents et manipulables. De tels modles relationnels, grce au langage standard SQL, prsentent la particularit d'tre implmentables sur toute plate-forme technologique indpendamment de considrations physiques.

    Nanmoins l'on sait que dans la ralit, il est toujours ncessaire de prendre en considration les caractristiques propres de chaque SGBDR, en particulier afin d' l'implmentation. Les optimisations optimiserconcernent en particulier la question des , question centrale dans les applications de bases de performancesdonnes, qui, puisqu'elles manipulent des volumes de donnes importants, risquent de conduire des temps de traitement de ces donnes trop longs par rapport aux besoins d'usage.

    Chaque SGBDR propose gnralement des mcaniques propres pour optimiser les implmentations, et il est alors ncessaire d'acqurir les comptences particulires propres ces systmes pour en matriser les arcanes. Il existe nanmoins des principes gnraux, que l'on retrouvera dans tous les systmes, comme par exemple les index, les groupements ou les vues matrialises. Nous nous proposerons d'aborder rapidement ces solutions pour en examiner les principes dans le cadre de ce cours.

    Nous aborderons galement quelques techniques de conception, qui consistent revenir sur la structure propose par l'tape de modlisation logique, pour tablir des modles de donnes plus aptes rpondre correctement des questions de performance. La dnormalisation ou le partitionnement en sont des exemples.

    1. Introduction l'optimisation du schma interneObjectifs

    Assimiler la problmatique de la performance en bases de donnes

    Connatre les grandes classes de solutions technologiques existantes aux problmes de performance

    Connatre et savoir mobiliser les techniques de conception permettant d'optimiser les performances d'une BD

    1.1. Schma interne et performances des applications

    La passage au schma interne (ou physique), i.e. l'implmentation du schma logique dans un SGBD*

    particulier, dpend de considrations pratiques lies aux performances des applications.

    CoursI

  • valuation des besoins de performance

    5

    -

    - - - - - - - - - -

    - - - - - -

    1. 2. 3.

    Les possibilits d'optimisation des schmas internes des dpendent essentiellement des fonctions offertes BD*

    par chaque SGBD.

    On peut nanmoins extraire certains principes d'optimisation des schmas internes suffisamment gnraux pour tre applicables dans la plupart des cas.

    Parmi les solutions d'optimisation existantes, on pourra citer :

    L'indexationLa dnormalisationLe partitionnement vertical et horizontalLes vues concrtesLe regroupement ( ) de tablesclustering...

    Des problmes de performance sont identifis,des solutions d'optimisation sont proposes,les solutions sont values pour vrifier leur impact et leur rponse au problme pos.

    1.2. valuation des besoins de performance

    Pour optimiser un schma interne, il est d'abord ncessaire de reprer les aspects du schma logique qui sont susceptibles de gnrer des problmes de performance.

    On pourra citer titre d'exemple les paramtres surveiller suivants :

    Taille des tuplesNombre de tuplesFrquence d'excution de requtesComplexit des requtes excutes (nombre de jointures, etc.)Frquence des mises jour (variabilit des donnes)Accs concurrentsDistribution dans la journe des accsQualit de service particulire rechercheParamtrabilit des excutionsetc.

    Une fois les lments de la valuer reprs, il faut mesurer si oui ou non ils risquent de poser un BD*

    problme de performance.

    L'valuation des performances peut se faire :

    Thoriquement

    Proposition de solutions

    Mthode : Dmarche d'optimisation

    lments surveiller

    valuation des cots

  • Indexation

    6

    -

    -

    - - -

    -

    En calculant le cot d'une opration (en temps, ressources mmoires, etc.) en fonction de paramtres (volume de donnes, disparit des donnes, etc.). En gnral en BD le nombre de paramtres est trs grand, et les calculs de cots trop complexes pour rpondre de faon prcise aux questions poses.EmpiriquementEn ralisant des implmentations de parties de schma et en les soumettant des tests de charge, en faisant varier des paramtres. Ce modle d'valuation est plus raliste que le calcul thorique. Il faut nanmoins faire attention ce que les simplifications d'implmentation faites pour les tests soient sans influence sur ceux-ci.

    1.3. Indexation

    Un index est une structure de donnes qui permet d'acclrer les recherches dans une table en associant une cl d'index (la liste des attributs indexs) l'emplacement physique de l'enregistrement sur le disque.

    Les accs effectues sur un index peuvent donc se faire sur des structures optimises pour la recherche (liste trie, B-tree...) au lieu de se faire par parcours squentiel et intgral des enregistrements.

    Les index doivent tre utiliss sur les tables qui sont frquemment soumises des recherches. Ils sont d'autant plus pertinents que les requtes slectionnent un petit nombre d'enregistrements (moins de 25% par exemple).

    Les index doivent tre utiliss sur les attributs :

    souvent mobiliss dans une restriction (donc une jointure)trs discrimins (c'est dire pour lesquels peu d'enregistrements ont les mmes valeurs)rarement modifis

    Les index diminuent les performances en mise jour (puisqu'il faut mettre jour les index en mme temps que les donnes).Les index ajoutent du volume la base de donnes et leur volume peut devenir non ngligeable.

    1 INDEX nom_index nom_table (NomColonneCl1, NomColonneCl2, ...);

    Les crent en gnral un index pour chaque cl (primaire ou candidate). En effet la vrification de la SGBD*

    contrainte d'unicit chaque mise jour des donnes justifie elle seule la prsence de l'index.

    Lorsque les attributs sont utiliss dans des restrictions ou des tris par l'intermdiaire de fonctions, l'index n'est gnralement pas pris en compte. L'opration ne sera alors pas optimise. Ainsi par exemple dans le code suivant, le restriction sur X ne sera pas optimise mme s'il existe un index sur X.

    Dfinition: Index

    Mthode : Cas d'usage des index de type B-Tree

    Attention : Inconvnients des index

    Syntaxe : Crer un index en SQL

    Remarque : Index implicites

    Attention : Attributs indexs utiliss dans des fonctions

    INDEX nom_index nom_table (NomColonneCl1, NomColonneCl2, ...);CREATE ON

  • Exercice

    7

    1 SELECT *2 FROM T3 WHERE ABS(X) > 100

    Cette non prise en compte de l'index est logique dans la mesure o, on le voit sur l'exemple prcdent, une fois l'attribut soumis une fonction, le classement dans l'index n'a plus forcment de sens (l'ordre des X, n'est pas l'ordre des valeurs absolues de X).

    Lorsqu'un soucis d'optimisation se pose, on cherchera alors sortir les attributs indexs des fonctions.

    Notons que certains SGBD, tels qu'Oracle partir de la version 8i, offrent des instructions d'indexation sur les fonctions qui permettent une gestion de l'optimisation dans ce cas particulier

    .SQL2 SQL3, applications Oracle*

    1.4. Exercice

    1.5. Dnormalisation

    La normalisation est le processus qui permet d'optimiser un modle logique afin de le rendre non redondant. Ce processus conduit la fragmentation des donnes dans plusieurs tables.

    Soit les deux tables cres par les instructions suivantes :

    1 T2 (2 E ( ) Primary Key);34 T1 (5 A number( ) Primary Key,6 B number( ) ,7 C ( ) References T2(E),8 D ( ));

    Soit une requte dont on cherche optimiser les performances :

    1 A2 T1, T23 C=E Abs(B)>4 D;

    Sachant que tous les attributs sont trs discrimins (c'est dire que les enregistrements contiennent souvent des valeurs diffrentes les uns par rapport aux autres) et que les deux tables contiennent un grand nombre d'enregistrements, quelles sont les instructions de cration d'index qui vont permettre d'optimiser l'excution de cette requte ?

    CREATE INDEX idxA ON T1(A);

    CREATE INDEX idxB ON T1(B);

    CREATE INDEX idxC ON T1(C);

    CREATE INDEX idxD ON T1(D);

    CREATE INDEX idxE ON T2(E);

    [ ]solution n1 *[ ] p.30

    Rappel

    SELECT *

    FROM T

    WHERE ABS(X) > 100

    T2 (CREATE TABLE

    E ( ) Primary Key);char 10

    T1 (CREATE TABLE

    A number( ) Primary Key,5

    B number( ) ,2 Not Null

    C ( ) References T2(E),char 10

    D ( ));char 5

    ASELECT

    T1, T2FROM

    C=E Abs(B)>WHERE AND 50

    D;ORDER BY

  • Les trois principes respecter pour introduire de la redondance dans une base de donnes

    8

    -

    -

    -

    1.

    2. 3.

    1.

    2. 3.

    Processus consistant regrouper plusieurs tables lies par des rfrences, en une seule table, en ralisant statiquement les oprations de jointure adquates.

    L'objectif de la dnormalisation est d'amliorer les performances de la en recherche sur les tables BD*

    considres, en implmentant les jointures plutt qu'en les calculant.

    La dnormalisation est par dfinition facteur de redondance. A ce titre elle doit tre utilise bon escient et des moyens doivent tre mis en uvre pour contrler la redondance cre.

    Un schma doit tre dnormalis lorsque les performances de certaines recherches sont insuffisantes et que cette insuffisance pour cause des jointures.

    La dnormalisation peut galement avoir un effet nfaste sur les performances :

    En mise jourLes donnes redondantes devant tre dupliques plusieurs fois.En contrle supplmentaireLes moyens de contrle ajouts ( , niveaux applicatifs, etc.) peuvent tre trs coteux.triggersEn recherche cibleCertaines recherches portant avant normalisation sur une "petite" table et portant aprs sur une "grande" table peuvent tre moins performantes aprs qu'avant.

    La redondance volontaire est autorise dans une base de donnes trois conditions:

    avoir une bonne raison d'introduire de la redondance (amliorer des performances dans le cas de la dnormalisation)documenter la redondance en explicitant les DF responsables de la non 3NFcontrler la redondance par des mcanismes logiciels (triggers par exemple)

    1.6. Les trois principes respecter pour introduire de la redondance dans une base de donnes

    La redondance volontaire est autorise dans une base de donnes condition de respecter trois principes:

    il faut avoir d'introduire de la redondance (amliorer des performances dans le cas de une bonne raisonla dnormalisation)

    il faut documenter la redondance en responsables de l'absence de 3NFexplicitant les DF*

    il faut contrler la redondance par des mcanismes logiciels qui vont assurer que la redondance ( par exemple)n'introduit pas d'incohrence triggers

    Dfinition: Dnormalisation

    Remarque : Dnormalisation et redondance

    Mthode : Quand utiliser la dnormalisation ?

    Attention : Inconvnients de la dnormalisation

    Fondamental : Redondance et bases de donnes

    Fondamental

  • Partitionnement de table

    9

    -

    -

    1.7. Exercice

    1.8. Partitionnement de table

    Le partitionnement d'une table consiste dcouper cette table afin qu'elle soit moins volumineuse, permettant ainsi d'optimiser certains traitements sur cette table.

    On distingue :

    Le partitionnement vertical, qui permet de dcouper une table en plusieurs tables, chacune ne possdant qu'une partie des attributs de la table initiale.Le partitionnement horizontal, qui permet de dcouper une table en plusieurs tables, chacune ne possdant qu'une partie des enregistrements de la table initiale.

    Soit les deux tables cres par les instructions suivantes :

    1 CREATE TABLE T2 (2 C char(10) Primary Key,3 E char(10));45 CREATE TABLE T1 (6 A char(10) Primary Key,7 B char(10), 8 C char(10) References T2(C),9 D char(10));

    Parmi les instructions suivantes qui viendraient remplacer les deux crations prcdentes, lesquelles implmenteraient une dnormalisation ?

    CREATE TABLE T3 (B char(10) Primary Key,D char(10));CREATE TABLE T2 (C char(10) Primary Key,

    E char(10));CREATE TABLE T1 (A char(10) Primary Key,B char(10) References T3(B),

    C char(10) References T2(C));

    CREATE TABLE T1 (A char(10) Primary Key,B char(10), C char(10) Unique Not Null,D char(10),E char(10));

    CREATE TABLE T1 (A char(10) Primary Key,B char(10), C char(10),D char(10),E char(10));

    CREATE TABLE T5 (E char(10) Primary Key);CREATE TABLE T4 (D char(10) Primary Key);

    CREATE TABLE T3 (B char(10) Primary Key);CREATE TABLE T2 (C char(10) Primary Key,

    E char(10) References T5(E));CREATE TABLE T1 (A char(10) Primary Key,B char(10) References T3(B),

    C char(10) References T2(C),D char(10) References T4(D));

    [ ]solution n2 *[ ] p.30

    Dfinition: Partitionnement de table

    CREATE TABLE T2 (

    C char(10) Primary Key,

    E char(10));

    CREATE TABLE T1 (

    A char(10) Primary Key,

    B char(10),

    C char(10) References T2(C),

    D char(10));

  • Exercice

    10

    Le partitionnement vertical est une technique consistant d'une table T sur des implmenter des projectionstables T1, T2, etc. en rptant la cl de T dans chaque Ti pour pouvoir recomposer la table initiale par jointure

    sur la cl ( ).Bases de donnes : objet et relationnel*

    Ce dcoupage quivaut considrer l'entit diviser comme un ensemble d'entits relies par des associations 1:1.

    Un tel dcoupage permet d'isoler des attributs peu utiliss d'autres trs utiliss, et ainsi amliore les performances lorsque l'on travaille avec les attributs trs utiliss (la table tant plus petite).

    Cette technique diminue les performances des oprations portant sur des attributs ayant t rpartis sur des tables diffrentes (une opration de jointure tant prsent requise).

    Le partitionnement vertical est bien entendu sans intrt sur les tables comportant peu d'attributs.

    Technique consistant diviser une table T en plusieurs tables T1, T2... et de telle selon des critres de restrictionfaon que tous les tuples de T soit conservs. La table T est alors recomposable par sur les Ti (union

    ).Bases de donnes : objet et relationnel*

    Un tel dcoupage permet d'isoler des enregistrements peu utiliss d'autres trs utiliss, et ainsi amliore les performances lorsque l'on travaille avec les enregistrements trs utiliss (la table tant plus petite). C'est le cas typique de l'archivage. Un autre critre d'usage est le fait que les enregistrements soient toujours utiliss selon un partitionnement donn (par exemple le mois de l'anne).

    Cette technique diminue les performances des oprations portant sur des enregistrements ayant t rpartis sur des tables diffrentes (une opration d'union tant prsent requise).

    Le partitionnement horizontal est bien entendu sans intrt sur les tables comportant peu d'enregistrements.

    Dfinition: Partitionnement vertical

    Remarque

    Mthode : Cas d'usage du partitionnement vertical

    Dfinition: Partitionnement horizontal

    Mthode : Cas d'usage

  • Vues concrtes

    11

    -

    1.9. Exercice

    1.10. Vues concrtes

    Un moyen de traiter le problme des requtes dont les temps de calcul sont trs longs et les frquences de mise jour faible est l'utilisation de vues concrtes.

    Une vue concrte est un stockage statique (dans une table) d'un rsultat de requte.

    Un accs une vue concrte permet donc d'viter de recalculer la requte et est donc aussi rapide qu'un accs une table isole. Il suppose par contre que les donnes n'ont pas t modifies (ou que leur modification est sans consquence) entre le moment o la vue a t calcule et le moment o elle est consulte.

    Une vue concrte est gnralement recalcule rgulirement soit en fonction d'un vnement particulier (une mise jour par exemple), soit en fonction d'un moment de la journe ou elle n'est pas consulte et o les ressources de calcul sont disponibles (typiquement la nuit).

    Synonymes: Vue matrialise

    L'instruction permet de crer une table partir d'un rsultat de requte sous CREATE TABLE AS SELECTPostgres.

    https://docs.postgresql.fr/current/sql-createtableas.html

    Vue matrialise sous Oracle * (cf. p.26)

    Soit la table suivante contenant des listes de rfrences produits :

    1 CREATE TABLE Tref (2 ref1 char(100) Primary Key,3 ref2 char(100) Unique Not Null, 4 ref3 char(100) Unique Not Null,5 ref4 char(100) Unique Not Null,6 ref5 char(100) Unique Not Null,7 ref6 char(100) Unique Not Null,8 ref7 char(100) Unique Not Null);

    On cherche optimiser la requte suivante ("_" et "%" sont des jokers qui signifient respectivement "1 caractre quelconque" et "0 N caractres quelconques") :

    1 SELECT ref1 2 FROM Tref 3 WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');

    Quelles sont les oprations de partitionnement qui permettront d'optimiser cette requte de faon maximale (indpendamment des consquences pour d'ventuelles autres requtes) ?

    Un partitionnement horizontal

    Un partitionnement vertical

    [ ]solution n3 *[ ] p.31

    Dfinition: Vue concrte

    Complment : CREATE TABLE AS (Postgres)

    Complment : Voir aussi

    CREATE TABLE Tref (

    ref1 char(100) Primary Key,

    ref2 char(100) Unique Not Null,

    ref3 char(100) Unique Not Null,

    ref4 char(100) Unique Not Null,

    ref5 char(100) Unique Not Null,

    ref6 char(100) Unique Not Null,

    ref7 char(100) Unique Not Null);

    SELECT ref1

    FROM Tref

    WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');

    https://docs.postgresql.fr/current/sql-createtableas.html

  • Complment: Groupement de tables

    12

    - Vue matrialise sous Postgreshttps://docs.postgresql.fr/current/sql-creatematerializedview.html

    1.11. Complment: Groupement de tables

    Un groupement ou est une structure utilise pour stocker des tables sur lesquelles doivent tre cluster physiqueeffectues de nombreuses requtes comprenant des oprations de jointure.

    Dans un groupement les enregistrements de plusieurs tables ayant une mme valeur de champs servant une jointure (cl du groupement) sont stockes dans un mme bloc physique de la mmoire permanente.

    Cette technique optimise donc les oprations de jointure, en permettant de remonter les tuples joints par un seul accs disque.

    Ensemble d'attributs prcisant la jointure que le groupement doit optimiser.

    Il faut d'abord dfinir un groupement, ainsi que les colonnes (avec leur domaine), qui constituent sa cl. On peut ainsi ensuite, lors de la cration d'une table prciser que certaines de ses colonnes appartiennent au groupement.

    1 CREATE CLUSTER nom_cluster (NomColonneCl1 type, NomColonneCl2 type, ...);23 CREATE TABLE nom_table (...)4 CLUSTER nom_cluster (Colonne1, Colonne2, ...);

    Le diminue les performances des requtes portant sur chaque table prise de faon isole, puisque les clusteringenregistrements de chaque table sont stocks de faon clate.

    Le groupement est une alternative la dnormalisation, qui permet d'optimiser les jointures sans crer de redondance.

    2. Mcanismes d'optimisation des moteurs de requtesObjectifs

    Comprendre les principes de fonctionnement du moteur d'optimisation interne aux SGBD

    2.1. Exercice: Calcul du cot d'une requteSoit deux relations et de respectivement 100 et 10 t1(a:char(8),b:integer) t2(b:integer)lignes.

    Dfinition: Groupement de table

    Dfinition: Cl du groupement

    Syntaxe : Syntaxe sous Oracle

    Remarque

    Remarque : Groupement et dnormalisation

    CREATE CLUSTER nom_cluster (NomColonneCl1 type, NomColonneCl2 type, ...);

    CREATE TABLE nom_table (...)

    CLUSTER nom_cluster (Colonne1, Colonne2, ...);

    https://docs.postgresql.fr/current/sql-creatematerializedview.html

  • Principe de l'optimisation de requtes

    13

    - - -

    1. 2. 3. 4.

    Soit la requte .SELECT * FROM t1 INNER JOIN t2 ON t1.b=t2.b WHERE t2.b=1

    Soit n1 le nombre de tuples tels que b=1 dans t1; n1 [0..100]Soit n2 le nombre de tuples tels que b=1 dans t2; n2 [0..10]Soit n3 le nombre de tuples tels que t1.b=t2.b; : n3 [0..1000]

    Question 1

    Question 2

    Question 3

    2.2. Principe de l'optimisation de requtes

    L'excution d'une requte SQL suit les tapes suivantes:

    Analyse syntaxique: Vrification de la correction syntaxique et traduction en oprations algbriquesContrle: Vrification des droits d'accs

    : Gnration de plans d'excution et choix du meilleurOptimisationExcution: Compilation et excution du plan choisi

    L'analyse de la requte permet de produire un excuter.arbre d'oprations

    Or il est possible de transformer cet arbre pour en obtenir d'autres quivalents, qui proposent des moyens , on parle de diffrents plans d'excution.diffrents pour arriver au mme rsultat

    L'optimisation de la requte est une opration informatique visant rcrire l'arbre d'excution de la requte en vue de choisir le plan d'excution le plus performant.

    2.3. Techniques pour l'optimisation de requtes

    Il existe des proprits permettant de modifier l'ordre des oprateurs algbriques, afin d'obtenir des gains de performance par exemple:

    Il existe plusieurs faons de traduire cette requte en algbre relationnel, proposer quelques exemples.[ ]solution n4 *[ ] p.32

    -

    -

    Calculer le nombre d'instructions de chaque exemple d'expression relationnelle:

    en considrant que les restrictions sont effectues par un parcours intgral dans des listes non tries (comme si c'tait effectu avec des boucles de type FOR);en considrant que chaque opration est effectue sparment.

    Effectuer les calculs pour trois valeurs de n1,n2 et n3 (une valeur minimum, une valeur maximum et une valeur intermdiaire). Donner un intervalle [min..max] indpendant de n1, n2 et n3.

    [ ]solution n5 *[ ] p.32

    Conclure en indiquant quelle opration ncessite le moins d'instructions.[ ]solution n6 *[ ] p.33

    Dfinition: Plan d'excution

    Dfinition: Optimisation de la requte

    Restructuration algbrique

  • Collecte de statistiques pour le moteur d'optimisation

    14

    - -

    - - -

    -

    - -

    - Le groupage des restrictions: Il permet d'effectuer plusieurs restrictions en un seul parcours de la table, au lieu d'un par restrictionRestriction (Restriction (t,x=a), x=b) Restriction (t,x=a ET x=b)

    La commutativit des restrictions et Jointures: Elle permet d'appliquer les restrictions avant les jointuresL'associativit des jointures: Elle permet de changer l'ordre des jointures, afin d'utiliser des algorithmes plus performants dans certains cas...

    Le moteur d'optimisation de la base de donnes va poser des rgles de rcriture pour produire des arbres d'excutions et choisir les moins coteux.

    Il va typiquement (restrictions et projections).appliquer d'abord les oprations rductrices

    Une des actions du moteur est d'ordonner les jointures (et les oprations ensemblistes) afin de:

    traiter le moins de tuples possibles;mobiliser les index existants au maximum;utiliser les algorithmes les plus performants.

    Pour cela le moteur d'optimisation a besoin de connatre le contenu de la BD: nombre de tuples dans les tables, prsence ou non d'index, ...

    Le moteur de la BD met sa disposition des informations statistiques rpondant ces besoins.

    2.4. Collecte de statistiques pour le moteur d'optimisation

    Le moteur d'optimisation d'une BD a besoin de collecter des informations sur les tables qu'il a manipuler afin de choisir les meilleurs plans d'excution, sur la taille des tables typiquement.

    Il est ncessaire de commander au moteur de collecter ces statistiques lorsque des changements de contenu importants ont t effectus dans la BD.

    1 ANALYSE ;

    1 ANALYSE;

    1 VACUUM ANALYZE;

    nombre de lignesvolume des donnes

    Heuristiques d'optimisation

    informations statistiques (modle de cot)

    Syntaxe : PostgreSQL: Analyse d'une table

    Syntaxe : PostgreSQL: Analyse de toute la base

    Syntaxe : PostgreSQL: Rcupration des espaces inutiliss et analyse de toute la base

    Complment : Exemple de donnes collectes

    ANALYSE ;

    ANALYSE;

    VACUUM ANALYZE;

  • Jointures et optimisation de requtes

    15

    -

    -

    -

    -

    -

    - - - valeurs moyennes, minimales, maximales

    nombre de valeurs distinctes (indice de dispersion)nombre d'occurrences des valeurs les plus frquentes (notamment pour les colonnes pourvues d'index...)

    http://sqlpro.developpez.com/cours/sqlaz/fondements/#L2.1

    2.5. Jointures et optimisation de requtes

    Il existe plusieurs algorithmes pour raliser une jointure:

    Jointures par boucles imbriques ( ): chaque tuple de la premire table est compar chaque nested looptuple de la seconde table.Jointure par tri-fusion ( ): les deux tables sont d'abord tries sur l'attribut de jointure, puis elles sort-mergesont fusionnes.Jointure par hachage ( ): les deux tables sont haches, puis jointes par fragment.hash join

    3. Analyse et optimisation manuelle des requtesObjectifs

    Savoir afficher et interprter un plan d'excution de requte

    Savoir crire des requtes performantes

    3.1. Analyse de cots de requtes (EXPLAIN)

    Le moteur SQL d'une BD peut afficher le plan qu'il prvoit d'excuter pour une requte donne, c'est dire la liste des oprations qui vont tre excutes, ainsi qu'une estimation du coup de ces oprations.

    1 EXPLAIN

    Soit la table "taero" des arodromes de France.

    SELECT count(*) FROM taero;

    retourne 421SELECT * FROM taero LIMIT 7;

    retourne la table ci-aprs.

    Algorithmes

    Dfinition: Plan d'excution

    Syntaxe : Syntaxe PostgreSQL

    Exemple

    EXPLAIN

    http://sqlpro.developpez.com/cours/sqlaz/fondements/#L2.1

  • Analyse de cots de requtes (EXPLAIN)

    16

    -

    - -

    Sept premires lignes de la table "taero"

    EXPLAIN SELECT code FROM taero

    retourne EXPLAIN SELECT code FROM taero "Seq Scan on taero (cost=0.00..8.21 rows=421 width=16)"

    L'opration excute un (parcours squentiel de toute la table)sequential scanLe (cot pour rcuprer le premier enregistrement) est de 0.00 et le cot estim de dmarrage cot estim

    (cot pour rcuprer tous les tuples) est de 8.21.totalL'unit est relative aux pages disque accdes, mais elle peut tre considre arbitrairement pour faire des comparaisons.Le rapportes est de 421, pour une de 16 octets chacune.nombre estim de lignes taille

    Le moteur SQL d'une BD peut excuter une requte et afficher le cot rellement observ d'excution des oprations.

    1 EXPLAIN ANALYSE

    Dfinition: Analyse d'excution

    Syntaxe : Syntaxe PostgreSQL

    EXPLAIN ANALYSE

  • Analyse de cots de requtes (EXPLAIN)

    17

    - - -

    - - -

    - - -

    - - - -

    1.

    2.

    EXPLAIN ANALYSE SELECT code FROM taero

    retourne EXPLAIN ANALYSE SELECT code FROM taero "Seq Scan on taero (cost=0.00..8.21 rows=421 width=16) (actual time=0.017..1.960 rows=421 loops=1)

    Total runtime: 3.668 ms"

    Le de l'opration est de 0.017ms et le est de 1.960mscot rel de dmarrage cot rel totalLe rellement rapport est de 421nombre de lignes

    indique l'opration de a t excut une seule foisloops=1 Seq ScanLe cot total de 3.668ms inclut le temps li l'environnement du moteur d'excution ( ).start and stop

    EXPLAIN ne donne qu'une valeur estime algorithmiquement du cot:

    cette estimation est de contingences matriel, c'est un cot thoriqueindpendantecette estimation est (chaque excution donne des informations identiques)reproductiblel'instruction SQL n'est pas excute

    ANALYSE donne un temps de calcul mesur rellement:

    ce temps mesur de l'environnement matriel (tat du rseau, charge du serveur, ...)dpendce temps mesur est chaque excution (en fonction des lments prcdents)variablel'instruction SQL est excute(on peut insrer la requte analyser dans une transaction et effectuer un ROLLBACK si l'on souhaite analyser l'excution d'une requte sans l'excuter)

    n'existe pas dans le standard SQL.EXPLAIN

    http://www.postgresql.org/docs/current/static/sql-explain.htmlhttp://www.postgresql.org/docs/current/static/using-explainhttp://www.bortzmeyer.org/explain-postgresql.html

    Exemple

    Attention

    Remarque

    Complment : Pour aller plus loin: PostgreSQL

    http://www.postgresql.org/docs/current/static/sql-explain.htmlhttp://www.postgresql.org/docs/current/static/using-explainhttp://www.bortzmeyer.org/explain-postgresql.html

  • Exemple de plans de requtes

    18

    -

    -

    1 EXPLAIN PLAN FOR

    Il faut pralablement avoir cr ou avoir accs une table particulire PLAN_TABLE qui sert stocker les rsultats du EXPLAIN.

    http://jpg.developpez.com/oracle/tuning/

    3.2. Exemple de plans de requtes

    Exemple d'excution EXPLAIN ANALYSE sur une table

    Exemple d'excution EXPLAIN sur une jointure

    3.3. Optimisation manuelle des requtes

    La faon d'crire des requtes influe sur l'excution. L'ide gnrale est d'crire des requtes qui:

    minimisent les informations retournes (par exemple en faisant toutes les projections possibles);

    Syntaxe : Syntaxe sous Oracle

    Complment : Pour aller plus loin: Oracle

    EXPLAIN PLAN FOR

    http://jpg.developpez.com/oracle/tuning/

  • Synthse: L'optimisation

    19

    - -

    - -

    -

    - -

    -

    -

    -

    - minimisent les traitements (par exemple en faisant toutes les restrictions possibles);

    vitent des oprations inutiles (par exemple: , ...);SELECT DISTINCT ORDER BY

    http://sqlpro.developpez.com/cours/optimiser/#L9

    4. Synthse: L'optimisation

    Modification du schma interne d'une BD pour en amliorer les performances.

    Techniques au niveau physique

    Indexation

    Regroupement physiqueVue concrte

    Techniques de modlisation

    DnormalisationPartitionnement

    HorizontalVertical

    5. Bibliographie commente sur l'optimisation

    SQL2 SQL3, applications Oracle*

    Une bonne description des index (page 79) et clusters (page 81) par l'image. Une description intressante d'une (sous Oracle 8i) qui permet d'indexer des fonctions, ce qui rpond un problme important fonction

    d'optimisation (page 84). Une description des vues matrialises, leur implmentation sous Oracle, des exemples d'usage dans le domaine du .datawarehouse

    Bases de Donnes Relationnelles et Systmes de Gestion de Bases de Donnes Relationnels, le Langage SQL*

    Des informations gnrales sur les et sur les .index clusters

    Complment : Trucs et astuces...

    Optimisation

    Complment : Synthses

    http://sqlpro.developpez.com/cours/optimiser/#L9http://wwwsi.supelec.fr/~yb/poly_bd/node122.htmlhttp://wwwsi.supelec.fr/~yb/poly_bd/node126.html

  • Exercices

    20

    1. Exercice: Film concret[5 minutes]

    Soit le schma relationnel suivant:

    1 Film (#isan:char(33), titre:varchar(25), entrees:integer, nomReal=>Realisateur(nom), prenomReal=>Realisateur(prenom))

    2 Realisateur (#nom:varchar(25), #prenom:varchar(25), ddn:date)

    Soit la requte suivante portant sur ce schma implment sous PostgreSQL:

    1 SELECT f.titre AS film, r.ddn AS real2 FROM Film f, Realisateur r3 WHERE f.nomReal=r.nom AND f.prenomReal=r.prenom

    Question

    2. Exercice: Super-lents[15 minutes]

    L'entreprise GARVEL propose des figurines de super-hros acheter en ligne sur un site Internet adoss sa base de donnes. Son catalogue a atteint cette anne le million de modles. Depuis quelques temps, et la rcente forte augmentation des modles au catalogue, les performances des consultations ont beaucoup chut, entranant des temps d'accs lents (plusieurs secondes) et une baisse des actes d'achat.

    La requte la plus utilise par l'application Web sert lister tous les super-hros avec toutes leurs caractristiques, avec leurs vhicules et leurs repaires (et galement toutes leurs caractristiques) et la trier par ordre de prix.

    ExercicesII

    Proposer une optimisation de cette requte sous la forme de la vue matrialise .vTopFilms[ ]solution n7 *[ ] p.33

    Film (#isan:char(33), titre:varchar(25), entrees:integer, nomReal=>Realisateur

    (nom), prenomReal=>Realisateur(prenom))Realisateur (#nom:varchar(25), #prenom:varchar(25), ddn:date)

    SELECT f.titre AS film, r.ddn AS real

    FROM Film f, Realisateur r

    WHERE f.nomReal=r.nom AND f.prenomReal=r.prenom

  • Exercice: Explications

    21

    Modle UML Figurines GARVEL

    Soyez et dans vos rponses; La bonne mobilisation des concepts du domaine et la clart de la concis prcisrdaction seront apprcies.

    Question 1

    Question 2

    Question 3

    3. Exercice: ExplicationsFichier CSV des dpartements franais (95 lignes)[cf. Fichier des dpartements franais]

    Extrait des premires lignes du fichier :

    1 numero,nom,pop2 1,Ain,5293 2,Aisne,5524 3,Allier,3575 4,Alpes-de-Haute-Provence,1456 5,Hautes-Alpes,1277 6,Alpes-Maritimes,10238 7,Ardche,295

    Expliquer pourquoi cette requte peut poser des problmes de performance, lorsque la base comprend de nombreux enregistrements.

    [ ]solution n8 *[ ] p.33

    Proposer et justifier une premire solution d'optimisation mettre en uvre qui sera utile dans tous les cas et n'aura que peu d'effets indsirables.

    [ ]solution n9 *[ ] p.34

    Proposer deux solutions alternatives qui, si l'on reste en relationnel, permettraient d'amliorer considrablement les performances. Vous en poserez les avantages, inconvnients et les mesures prendre pour contenir ces inconvnients.

    [ ]solution n10 *[ ] p.34

    numero,nom,pop

    1,Ain,529

    2,Aisne,552

    3,Allier,357

    4,Alpes-de-Haute-Provence,145

    5,Hautes-Alpes,127

    6,Alpes-Maritimes,1023

    7,Ardche,295

  • Exercice: Explications

    22

    9 8,Ardennes,29910 9,Arige,143

    Fichier CSV des villes franaises (36700 lignes)[cf. Fichier des communes franaises]

    Extrait des premires lignes du fichier:

    1 codeinsee,departement,nom,pop2010,pop19992 1284,1,Ozan,618,4693 1123,1,Cormoranche-sur-Sane,1058,9034 1298,1,Plagne,129,835 1422,1,Tossiat,1406,11116 1309,1,Pouillat,88,587 1421,1,Torcieu,698,6438 1320,1,Replonges,3500,28419 1119,1,Corcelles,243,222

    10 1288,1,Pron,2143,1578

    Question 1

    VACUUM

    Excutez la commande ci-aprs, on observe seulement 21300 lignes collectes, l ou 36700 taient attendues.

    1 EXPLAIN2 * ville;

    1 QUERY PLAN2 -----------------------------------------------------------3 Seq Scan on ville (cost=0.00..497.00 rows=21300 width=32)

    Question 2

    Projection

    Excutez la commande ci-aprs permettant de projeter le nom des villes.

    1 EXPLAIN2 nom ville;

    1 QUERY PLAN2 -----------------------------------------------------------3 Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)

    Question 3

    Restriction et tri

    Instancier la base de donnes Postgres permettant de grer ces fichiers.[ ]solution n11 *[ ] p.34

    Expliquez pourquoi et proposez une solution.

    Indice :

    Collecte de statistiques pour le moteur d'optimisation (cf. p.14)

    [ ]solution n12 *[ ] p.35

    Quelle diffrence observez-vous avec le plan de la requte ? Expliquez.SELECT * FROM ville[ ]solution n13 *[ ] p.35

    8,Ardennes,299

    9,Arige,143

    codeinsee,departement,nom,pop2010,pop1999

    1284,1,Ozan,618,469

    1123,1,Cormoranche-sur-Sane,1058,903

    1298,1,Plagne,129,83

    1422,1,Tossiat,1406,1111

    1309,1,Pouillat,88,58

    1421,1,Torcieu,698,643

    1320,1,Replonges,3500,2841

    1119,1,Corcelles,243,222

    1288,1,Pron,2143,1578

    EXPLAIN

    * ville;SELECT FROM

    QUERY PLAN

    -----------------------------------------------------------

    Seq Scan on ville (cost=0.00..497.00 rows=21300 width=32)

    EXPLAIN

    nom ville;SELECT FROM

    QUERY PLAN

    -----------------------------------------------------------

    Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)

  • Exercice: Explications

    23

    Excutez les commande ci-aprs permettant respectivement de faire une restriction et un tri sur le nom des villes.

    1 EXPLAIN2 nom ville3 nom= ;

    1 QUERY PLAN 2 -------------------------------------------------------3 Seq Scan on ville (cost=0.00..742.75 rows=1 width=12)4 Filter: ((nom)::text = 'Compigne'::text)

    1 EXPLAIN2 nom ville3 nom;

    1 QUERY PLAN 2 -----------------------------------------------------------------3 Sort (cost=3433.50..3525.25 rows=36700 width=12)4 Sort Key: nom5 -> Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)

    Question 4

    Jointure

    Excutez la commande ci-aprs permettant de faire une jointure.

    1 EXPLAIN2 v , d3 ville v dpt d4 v = d ;

    1 Hash Join (cost=3.14..1136.96 rows=34520 width=22)2 Hash Cond: (v.departement = d.numero)3 -> Seq Scan on ville v (cost=0.00..651.00 rows=36700 width=16)4 -> Hash (cost=1.95..1.95 rows=95 width=13)5 -> Seq Scan on dpt d (cost=0.00..1.95 rows=95 width=13)

    Question 5

    Question 6

    Qu'observez-vous? Proposez une solution pour amliorer ces deux requtes. Mesurez le gain apport par la solution. Notez les ventuels inconvnient apports par la solution.

    [ ]solution n14 *[ ] p.35

    Indexez la cl trangre . Observez-vous pas de gain? Expliquez.v.departement[ ]solution n15 *[ ] p.36

    partir des plans prcdents, calculez le gain qu'apporterait une dnormalisation cette jointure.[ ]solution n16 *[ ] p.36

    EXPLAIN

    nom villeSELECT FROM

    nom= ;WHERE 'Compigne'

    QUERY PLAN

    -------------------------------------------------------

    Seq Scan on ville (cost=0.00..742.75 rows=1 width=12)

    Filter: ((nom)::text = 'Compigne'::text)

    EXPLAIN

    nom villeSELECT FROM

    nom;ORDER BY

    QUERY PLAN

    -----------------------------------------------------------------

    Sort (cost=3433.50..3525.25 rows=36700 width=12)

    Sort Key: nom

    -> Seq Scan on ville (cost=0.00..651.00 rows=36700 width=12)

    EXPLAIN

    v , dSELECT .nom .nom

    ville v dpt dFROM JOIN

    v = d ;ON .departement .numero

    Hash Join (cost=3.14..1136.96 rows=34520 width=22)

    Hash Cond: (v.departement = d.numero)

    -> Seq Scan on ville v (cost=0.00..651.00 rows=36700 width=16)

    -> Hash (cost=1.95..1.95 rows=95 width=13)

    -> Seq Scan on dpt d (cost=0.00..1.95 rows=95 width=13)

  • Devoirs

    24

    1.

    2.

    3.

    4.

    1. Exercice: Big Brother is Watching You[45 minutes]

    Soit une base de donnes compose d'une seule table destine recevoir un enregistrement pour chaque personne vivante au monde. Le schma de la base est le suivant :

    Habitant (#Numero, Nom, Prenom, NRue, Rue, Quartier, Ville, Etat, Pays,

    DateNaissance, PaysNaissance, VilleNaissance)

    On dispose galement des informations concernant les questions qui seront poses cette base ainsi que les performances attendues quand aux rponses ces questions :

    Recherche d'individusSlection d'enregistrements tant donn un nom et un pays, projection sur les noms et prnoms et tri alphabtique sur les prnoms.Cette requte doit tre le plus performante possible.RecensementComptage de tous les habitants d'un pays.Cette requte doit tre performante.Informations sur un individuSlection d'un enregistrement tant donn un numro et projection de l'ensemble des informations.Si cette requte est performante, tant mieux, mais elle n'est pas excute trs souvent et la rponse peut gnralement attendre.StatistiquesCalcul de l'age moyen de la population mondiale tant donn une tranche d'age.Aucune performance n'est attendue de cette requte qui s'excute assez rarement et toujours en tche diffre.

    Question 1

    Question 2

    DevoirsIII

    - -

    crivez en SQL les questions qui seront poses la BD.

    Indice :

    On pose :

    [X] dsigne le paramtre XNow() est une fonction qui renvoie la date du jour

    Proposez des solutions pour optimiser l'implmentation physique de cette base de donnes.

    Indice :

  • Exercice: Big Brother is Watching You

    25

    Question 3

    - - - -

    Proposez:

    un partitionnement horizontalun partitionnement verticaldeux indexune vue matrialise

    Rcrivez les requtes avec le nouveau schma de la base.

  • Contenus annexes

    26Stphane Crozat

    > Vue matrialise sous Oracle

    Oracle 9i propose une extension au LDD SQL pour crer explicitement des vues matrialises plutt que la gestion manuelle classique consistant crer une table et l'alimenter manuellement avec une requte de type INSERT.

    Une vue matrialise est un stockage statique (dans une table) d'un rsultat de requte. Il permet donc d'anticiper des requtes complexes en pr-calculant tout ou partie du rsultat.

    Vues concrtes (cf. p.11)

    1 CREATE MATERIALIZED VIEW nom_vue2 [PARTITION BY ...]3 BUILD IMMEDIATE -- quand la construire (alt. : DEFERED)4 REFRESH FORCE -- mode de rafrachissement (alt. : COMPLETE, FAST) 5 ON DEMAND -- quand la rafrachir (alt. : COMMIT)6 ENABLE QUERY REWRITE -- utilisable pour l'optimisation automatique de requtes (alt. : DISABLE)

    7 AS8 SELECT ...

    Si le rafrachissement de la vue peut tre programm, il est nanmoins parfois ncessaire de procder un rafrachissement manuel.

    1 EXECUTE dbms_mview.refresh('nom_vue');

    La dclaration d'une vue matrialise dans Oracle, permettra l'optimiseur de l'utiliser pour effectuer la requte correspondante plutt que d'interroger les tables sources.

    Contenus annexes

    Introduction

    Rappel

    Syntaxe : Dclaration de vue matrialise

    Syntaxe : Rafrachissement manuel de la vue

    Optimisation des requtes

    CREATE MATERIALIZED VIEW nom_vue

    [PARTITION BY ...]

    BUILD IMMEDIATE -- quand la construire (alt. : DEFERED)

    REFRESH FORCE -- mode de rafrachissement (alt. : COMPLETE, FAST)

    ON DEMAND -- quand la rafrachir (alt. : COMMIT)

    ENABLE QUERY REWRITE -- utilisable pour l'optimisation automatique de

    requtes (alt. : DISABLE)AS

    SELECT ...

    EXECUTE dbms_mview.refresh('nom_vue');

  • Contenus annexes

    27Stphane Crozat

    Oracle ne pourra pas toujours infrer automatiquement que des vues matrialises sont utilisables la place des tables originales. Il est donc ncessaire dans ce cas de rcrire soi-mme les requtes concernes. En pratique c'est souvent le cas si les vues sont complexes.

    La dclaration d'une vue matrialise sous Oracle 9i permet galement de planifier automatiquement les modalits de rafrachissement de la vue, plutt que de devoir grer un rafrachissement uniquement manuel.

    Une vue matrialise peut tre indexe ou partitionne comme toute table Oracle.

    Attention

    Raffrachissement de la vue matrialise

    Remarque

  • Questions de synthse

    28Stphane Crozat

    Citer des paramtres propres une BD que l'on doit surveiller dans le cadre de la performance ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Peut-on anticiper sur des problmes de performance futurs lors de la conception d'une BD ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Pourquoi n'indexe-t-on pas tous les champs d'une BD ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Quels problmes pose la dnormalisation ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Questions de synthse

  • Questions de synthse

    29Stphane Crozat

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Quels problmes pose le partitionnement ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    Quels problmes pose les vues concrtes ?

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

    .........................................................................................................................................................................................................................................................

  • Solutions des exercices

    30Stphane Crozat

    Exercice p. 8> Solution n2

    Exercice p. 7> Solution n1

    1. 2. 3.

    Soit les deux tables cres par les instructions suivantes :

    1 T2 (2 E ( ) Primary Key);34 T1 (5 A number( ) Primary Key,6 B number( ) ,7 C ( ) References T2(E),8 D ( ));

    Soit une requte dont on cherche optimiser les performances :

    1 A2 T1, T23 C=E Abs(B)>4 D;

    Sachant que tous les attributs sont trs discrimins (c'est dire que les enregistrements contiennent souvent des valeurs diffrentes les uns par rapport aux autres) et que les deux tables contiennent un grand nombre d'enregistrements, quelles sont les instructions de cration d'index qui vont permettre d'optimiser l'excution de cette requte ?

    CREATE INDEX idxA ON T1(A);

    CREATE INDEX idxB ON T1(B);

    CREATE INDEX idxC ON T1(C);

    CREATE INDEX idxD ON T1(D);

    CREATE INDEX idxE ON T2(E);

    Il est intressant d'indexer C car c'est une cl trangre et D car il est mobilis dans un tri.Indexer B est inutile (donc nfaste) car B est utilis travers une fonction (valeur absolue ici).A et E sont dj indexs automatiquement lors de la cration des tables, car ce sont les cls primaires.

    Soit les deux tables cres par les instructions suivantes :

    1 CREATE TABLE T2 (

    Solutions des exercices

    T2 (CREATE TABLE

    E ( ) Primary Key);char 10

    T1 (CREATE TABLE

    A number( ) Primary Key,5

    B number( ) ,2 Not Null

    C ( ) References T2(E),char 10

    D ( ));char 5

    ASELECT

    T1, T2FROM

    C=E Abs(B)>WHERE AND 50

    D;ORDER BY

    CREATE TABLE T2 (

  • Solutions des exercices

    31Stphane Crozat

    Exercice p. 11> Solution n3

    1. 2.

    3.

    2 C char(10) Primary Key,3 E char(10));45 CREATE TABLE T1 (6 A char(10) Primary Key,7 B char(10), 8 C char(10) References T2(C),9 D char(10));

    Parmi les instructions suivantes qui viendraient remplacer les deux crations prcdentes, lesquelles implmenteraient une dnormalisation ?

    CREATE TABLE T3 (B char(10) Primary Key,D char(10));CREATE TABLE T2 (C char(10) Primary Key,

    E char(10));CREATE TABLE T1 (A char(10) Primary Key,B char(10) References T3(B),

    C char(10) References T2(C));

    CREATE TABLE T1 (A char(10) Primary Key,B char(10), C char(10) Unique Not Null,D char(10),E char(10));

    CREATE TABLE T1 (A char(10) Primary Key,B char(10), C char(10),D char(10),E char(10));

    CREATE TABLE T5 (E char(10) Primary Key);CREATE TABLE T4 (D char(10) Primary Key);

    CREATE TABLE T3 (B char(10) Primary Key);CREATE TABLE T2 (C char(10) Primary Key,

    E char(10) References T5(E));CREATE TABLE T1 (A char(10) Primary Key,B char(10) References T3(B),

    C char(10) References T2(C),D char(10) References T4(D));

    La premire proposition pourrait traduire au contraire une opration de normalisation (si B dtermine D).La dernire proposition semble inutile dans le cas gnral (sauf si l'on cherche renforcer le contrle des domaines de B, D et E parmi des listes dynamiques de valeurs par exemple); ce n'est en tout cas pas une dnormalisation.C ne peut pas tre UNIQUE: il est unique dans T2, mais pas pas dans T1 (association 1:N).

    Soit la table suivante contenant des listes de rfrences produits :

    1 CREATE TABLE Tref (2 ref1 char(100) Primary Key,3 ref2 char(100) Unique Not Null, 4 ref3 char(100) Unique Not Null,5 ref4 char(100) Unique Not Null,6 ref5 char(100) Unique Not Null,7 ref6 char(100) Unique Not Null,8 ref7 char(100) Unique Not Null);

    On cherche optimiser la requte suivante ("_" et "%" sont des jokers qui signifient respectivement "1 caractre quelconque" et "0 N caractres quelconques") :

    C char(10) Primary Key,

    E char(10));

    CREATE TABLE T1 (

    A char(10) Primary Key,

    B char(10),

    C char(10) References T2(C),

    D char(10));

    CREATE TABLE Tref (

    ref1 char(100) Primary Key,

    ref2 char(100) Unique Not Null,

    ref3 char(100) Unique Not Null,

    ref4 char(100) Unique Not Null,

    ref5 char(100) Unique Not Null,

    ref6 char(100) Unique Not Null,

    ref7 char(100) Unique Not Null);

  • Solutions des exercices

    32Stphane Crozat

    -

    Exercice p. 13> Solution n5

    Exercice p. 13> Solution n4

    1.

    2.

    1.

    2.

    3.

    4.

    1. 2. 3.

    1. 2.

    1 SELECT ref1 2 FROM Tref 3 WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');

    Quelles sont les oprations de partitionnement qui permettront d'optimiser cette requte de faon maximale (indpendamment des consquences pour d'ventuelles autres requtes) ?

    Un partitionnement horizontal

    Un partitionnement vertical

    Le partitionnement horizontal permettra d'isoler les enregistrements dont "ref2" correspond aux critres de restriction.Le partitionnement vertical permettra d'isoler les attributs ref1 et ref2, seuls concerns par la requte. On vitera ainsi de travailler avec les autres attributs, par ailleurs relativement volumineux (chanes de 100 caractres).

    On disposera alors de 4 tables :

    TrefPartition12OKcontiendra les enregistrements correspondant aux critres de restriction de la requte avec les attributs ref1 et ref2.TrefPartition134567OKcontiendra les enregistrements correspondant aux critres de restriction de la requte avec tous les attributs sauf ref2 (ref1 tant la cl primaire et la cl trangre vers TrefPartition12OK).TrefPartition12nonOKcontiendra les enregistrements ne correspondant pas aux critres de restriction de la requte avec les attributs ref1 et ref2.TrefPartition134567nonOKcontiendra les enregistrements ne correspondant pas aux critres de restriction de la requte avec tous les attributs sauf ref2 (ref1 tant la cl primaire et la cl trangre vers TrefPartition12nonOK).

    La requte rsultante sera alors : "SELECT ref1 FROM TrefPartition12OK".

    Restriction (JointureNaturelle t1,t2), t2.b=1)

    JointureNaturelle (Restriction (t2, b=1), t1)

    JointureNaturelle (Restriction (t1, b=1), t2)

    JointureNaturelle: 100 x 10 = 1000 instructions; renvoie n3 tuplesRestriction: n3 instructions

    Nombre de tuples renvoys:

    Total: 1000 + n3

    Exemple

    Exemple : Restriction (JointureNaturelle t1,t2), t2.b=1)

    SELECT ref1 FROM Tref

    WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');

  • Solutions des exercices

    33Stphane Crozat

    Exercice p. 20> Solution n7

    - - -

    Exercice p. 13> Solution n6

    -

    - -

    - - -

    - -

    1. 2.

    1. 2.

    Min(n3=0): 1000; Max (n3=1000): 2000; Exemple (n3=500): 1500Intervalle: [1000..2000]

    Restriction: 10 instructions; renvoie n2 tuplesJointureNaturelle : n2 x 100

    Nombre de tuples renvoys:

    Total: 10 + n2 x 100Min(n2=0): 10; Max (n2=10): 1010; Exemple (n2=1): 110; Exemple (n2=5): 510Intervalle: [10..1010]

    Restriction: 100 instructions; renvoie n1 tuplesJointureNaturelle : n1 x 10

    Nombre de tuples renvoys:

    Total: 100 + n1 x 10Min(n1=0): 100; Max (n1=100): 1100; Exemple (n1=1): 110; Exemple (n1=5): 150; Exemple (n1=50): 500Intervalle: [100..1100]

    Dans (presque) tous les cas les requtes 2 et 3 sont plus efficaces que 1 (il vaut mieux faire la restriction avant la jointure), le choix entre 2 et 3 dpend de n1 et de n2.

    Un cas o il est prfrable de faire la jointure avant est par exemple lorsque n3=0 (donc il n'y a aucun tuples joindre). Notons que le gain est marginal (gain de 10% dans le meilleur des cas).

    On en conclut que pour faire le meilleur choix le moteur de requte doit:

    dcider dans quel ordre effectuer les opration relationnelle (ici jointure ou restriction)disposer d'information sur le des tables (ici 10 et 100 tuples)a priori volumedisposer d'information sur le (ici les valeurs de n1, n2 et n3)a priori rsultat des requtes

    12 vTopFilms (3 film ( ), 4 ( )5 );678 vTopFilms9 f , r

    10 Film f, Realisateur r11 f =r f =r ;

    Exemple : JointureNaturelle (Restriction (t2, b=1), t1)

    Exemple : JointureNaturelle (Restriction (t1, b=1), t2)

    -- Materialized view creation

    vTopFilms (CREATE TABLE

    film ( ), varchar 25

    ( )real varchar 25

    );

    -- Materialized view initialization

    vTopFilmsINSERT INTO

    f , rSELECT .titre .ddn

    Film f, Realisateur rFROM

    f =r f =r ;WHERE .nomReal .nom AND .prenomReal .prenom

  • Solutions des exercices

    34Stphane Crozat

    Exercice p. 22> Solution n11

    Exercice p. 21> Solution n10

    Exercice p. 21> Solution n9

    Exercice p. 21> Solution n8

    1. 2.

    1.

    2.

    3.

    4.

    Les problmes de performance sont lis au qui s'effectue sur le prix d'une part;triet aux qui doivent tre excutes entre toutes les tables de la base pour pouvoir extraire la liste jointuresde toutes les figurines avec leurs caractristiques.

    Une premire optimisation vidente concerne l' , elle permettra d'acclrer indexation du champ prixl'opration de tri, et ses effets indsirables (ralentissement de la mise jour et augmentation du volume disque) seront ngligeables.

    Si l'on devait rester en relationnel on pourrait le modle de faon ne plus avoir faire de dnormaliserjointure, ou en faire moins selon le degr de dnormalisation.Cette solution engendrerait de la , qu'il faudrait contrler par ailleurs, etredondance au niveau applicatif/ou au niveau de la base de donnes, par des par exemple.triggersUne alternative serait de crer une qui pr-calculerait les jointures (et le tri par la mme vue matrialiseoccasion).L'inconvnient est que cette vue introduirait un dcalage entre ce qui est prsent dans la base et ce que l'on visualise sur le site. La calcul de la vue n'tant que de quelques secondes, on pourra envisager, sans surcharger le serveur, un nouveau calcul de la vue lies, dclenche par chaque mise jour des donnesun par exemple.trigger

    (Notons que les solutions de partitionnement ne seraient d'aucun intrt tant donn que toutes les donnes, enregistrements et attributs, doivent tre retournes; moins d'une partition sur le prix cela aura mme un effet ngatif tant donn qu'il faudra raliser l'union avant le tri par prix).

    1 dpt (2 numero ( ) PRIMARY KEY,3 nom ,4 pop 5 );67 ville (8 codeinsee ( ) PRIMARY KEY,9 departement ( ),

    10 nom ,11 pop2010 ,12 pop1999 13 );

    1 \copy dpt dpt_france WITH CSV HEADER DELIMITER 23 \copy ville villes_france WITH CSV HEADER DELIMITER

    dpt (CREATE TABLE

    numero ( ) PRIMARY KEY,CHAR 2

    nom ,VARCHAR

    pop INTEGER

    );

    ville (CREATE TABLE

    codeinsee ( ) PRIMARY KEY,CHAR 5

    departement ( ),CHAR 3

    nom ,VARCHAR

    pop2010 ,INTEGER

    pop1999 INTEGER

    );

    \copy dpt dpt_france WITH CSV HEADER DELIMITER FROM .csv ','

    \copy ville villes_france WITH CSV HEADER DELIMITER FROM .csv ','

  • Solutions des exercices

    35Stphane Crozat

    -

    - -

    Exercice p. 23> Solution n14

    Exercice p. 22> Solution n13

    Exercice p. 22> Solution n12

    Le fichier des dpartements n'est pas complet, la contrainte de cl trangre ne peut pas tre dclare ici.

    Il faut excuter la commande pour commander au moteur de collecter des statistiques sur VACUUM ANALYZEles donnes frachement entres. Le rsultat de la requte est alors celui attendu.

    1 VACUUM ANALYSE;2 EXPLAIN3 * ville;

    1 QUERY PLAN 2 -----------------------------------------------------------3 Seq Scan on ville (cost=0.00..651.00 rows=36700 width=30)

    La seule diffrence concerne la valeur de qui passe de 30 12. Cette valeur indique la largeur moyenne width(en octet) d'une ligne. La projection a logiquement rduit cette valeur.

    Les cots sont augment car il faut faire des recherches dans le champ . On peut optimiser ces requtes en nomindexant ce champ.

    1 INDEX idxnom ville(nom);

    1 EXPLAIN2 nom ville3 nom= ;

    1 QUERY PLAN 2 -------------------------------------------------------------------------3 Index Only Scan using idxnom on ville (cost=0.29..4.31 rows=1 width=12)4 Index Cond: (nom = 'Compigne'::text)

    Le cot dans le pire cas a t rduit de 742 4,3 (gain d'un facteur 172).On notera que le cot minimum, dans le cas o Compigne est la premire ville de la table est augment de 0 0,29 (c'est le cot fixe de l'accs l'index). C'est ici une perte ngligeable par rapport au gain dans le pire cas et qui ne se produira que dans des cas trs rares.On ne mesure pas ici les autres inconvnients de l'indexation (temps de mise jour, espace disque complmentaire).

    1 EXPLAIN2 nom ville3 nom;

    1 QUERY PLAN 2 --------------------------------------------------------------------------------3 Index Only Scan using idxnom on ville (cost=0.29..1130.79 rows=36700 width=12)

    Remarque

    VACUUM ANALYSE;

    EXPLAIN

    * ville;SELECT FROM

    QUERY PLAN

    -----------------------------------------------------------

    Seq Scan on ville (cost=0.00..651.00 rows=36700 width=30)

    INDEX idxnom ville(nom);CREATE ON

    EXPLAIN

    nom villeSELECT FROM

    nom= ;WHERE 'Compigne'

    QUERY PLAN

    -------------------------------------------------------------------------

    Index Only Scan using idxnom on ville (cost=0.29..4.31 rows=1 width=12)

    Index Cond: (nom = 'Compigne'::text)

    EXPLAIN

    nom villeSELECT FROM

    nom;ORDER BY

    QUERY PLAN

    --------------------------------------------------------------------------------

    Index Only Scan using idxnom on ville (cost=0.29..1130.79 rows=36700 width=12)

  • Solutions des exercices

    36Stphane Crozat

    Exercice p. 23> Solution n16

    Exercice p. 23> Solution n15

    -

    - Le cot pour rcuprer la premire ligne passe de 3433 0,29 (qui est le cot de l'accs l'index). Il y a donc un gain trs important, qui est intressant si l'on souhaite transmettre les noms des villes progressivement et dans l'ordre du tri.Le cot pour rcuprer toutes les lignes passent de 3525 1130 (gain d'un facteur 3,1).

    1 INDEX idxdpt ville(departement);

    Le plan d'excution n'a pas chang du tout. Le utilis pour effectuer la jointure n'utilise pas l'index.hash join

    Le plan serait similaire celui de (avec simplement un plus important).SELECT nom FROM ville width

    Le cot serait donc de 651 au lieu de 1136: la requte serait 1,75 fois plus rapide.

    INDEX idxdpt ville(departement);CREATE ON

  • Signification des abrviations

    37Stphane Crozat

    BD : Base de Donnes

    DF : Dpendance Fonctionnelle

    SGBD : Systme de Gestion de Bases de Donnes

    Abrviations

  • Bibliographie

    38Stphane Crozat

    . . , Delmal Pierre SQL2 SQL3, applications Oracle De Boeck Universit 2001.

    . . , Gardarin Georges Bases de donnes : objet et relationnel Eyrolles 1999.

    Bibliographie

  • Webographie

    39Stphane Crozat

    , Bourda Yolaine Bases de Donnes Relationnelles et Systmes de Gestion de Bases de Donnes Relationnels, le , , .Langage SQL http://wwwsi.supelec.fr/~yb/poly_bd/ consult en 2009

    Webographie

    http://wwwsi.supelec.fr/~yb/poly_bd/

    CoursIntroduction l'optimisation du schma interneSchma interne et performances des applicationsvaluation des besoins de performanceIndexationExerciceDnormalisationLes trois principes respecter pour introduire de la redondance dans une base de donnesExercicePartitionnement de tableExerciceVues concrtesComplment: Groupement de tables

    Mcanismes d'optimisation des moteurs de requtesExercice: Calcul du cot d'une requtePrincipe de l'optimisation de requtesTechniques pour l'optimisation de requtesCollecte de statistiques pour le moteur d'optimisationJointures et optimisation de requtes

    Analyse et optimisation manuelle des requtesAnalyse de cots de requtes (EXPLAIN)Exemple de plans de requtesOptimisation manuelle des requtes

    Synthse: L'optimisationBibliographie commente sur l'optimisation

    ExercicesExercice: Film concretExercice: Super-lentsExercice: Explications

    DevoirsExercice: Big Brother is Watching You

    Contenus annexesQuestions de synthseSolutions des exercicesAbrviationsBibliographieWebographie