introduction à l'optimisation des bases de données · introduction à l'optimisation des bases de...
TRANSCRIPT
-
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