Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Optimisation
Thierry Hamon
Bureau H202
Institut Galilée - Université Paris 13
&
LIMSI-CNRS
hamon@limsi.fr
https://perso.limsi.fr/hamon/Teaching/P13/BDA-AIR3-2016-2017/
AIR3 – ABD
1/169
Optimisation des performances
Introduction
2/169
Optimisation des performances
Introduction
Application Batch
L’application n’est pas disponible à partir d’une certaine heure
Application transactionnelle
L’utilisateur constate que le temps de réponse est inacceptable
(Agence de voyage, application interne, etc.)
3/169
Optimisation des performances
Acteurs
4/169
Optimisation des performances
Objectifs
5/169
Optimisation des performances
Objectifs
6/169
Optimisation des performances
Objectifs
7/169
Optimisation des performances
Objectifs
7/169
Optimisation des performances
Objectifs
8/169
Optimisation des performances
Objectifs
8/169
Optimisation des performances
Objectifs
8/169
Optimisation des performances
Conception des SI et optimisation des Applications
Partie 1
9/169
Optimisation des performances
Conception des SI et optimisation des Applications
Objectifs de l’optimisation
10/169
Optimisation des performances
Conception des SI et optimisation des Applications
Objectifs de l’optimisation
Intervenants :
Administrateurs de Bases de Données (ABD = DBA)
Programmeurs d’Applications sur SGBD
Objectifs :
Optimiser un système existant et connaı̂tre les impacts de
certains paramètres en fonction du type d’application sur le
système
Choisir un SGBD en ayant comme contrainte les critères de
performances
11/169
Optimisation des performances
Conception des SI et optimisation des Applications
12/169
Optimisation des performances
Optimisation logique
13/169
Optimisation des performances
Optimisation logique
14/169
Optimisation des performances
Optimisation logique
Normalisation
Exemple
Avant normalisation :
Relation1 ( Attribut1 , Attribut2 , . . . )
15/169
Optimisation des performances
Optimisation logique
Normalisation
16/169
Optimisation des performances
Optimisation logique
Normalisation
Illustration
17/169
Optimisation des performances
Optimisation logique
Normalisation
Exemple
Soit la relation :
ADRESSES ( V i l l e , Numéro , Rue , C o d e P o s t a l )
Décomposition de la relation
ADRESSES ( r e l a t i o n en 3ème FN)
18/169
Optimisation des performances
Optimisation logique
Normalisation
Exemple
ADRESSES
VILLE NUMERO RUE CODE POSTAL
Paris 6 Rue de la Rosière 75015
Paris 16 Rue de la Rosière 75015
Paris 51 Rue des Entrepreneurs 75015
Paris 55 Rue des Entrepreneurs 75015
Paris 8 Avenue des Champs Elysées 75008
Epinay sur Seine 23 Boulevard Foch 93800
CPR CPV
CODE POSTAL RUE CODE POSTAL VILLE
75015 Rue de la Rosière 75008 Paris
75015 Rue des Entrepreneurs 75015 Paris
75008 Avenue des Champs Elysées 93800 Epinay sur Seine
93800 Boulevard Foch
19/169
Optimisation des performances
Optimisation logique
Normalisation
Exemple
Un client a une adresse :
SLD version 1
CLIENT ( C o d e C l i , NomCli , PrénomCli ,
Numéro , Rue , C o d e P o s t a l , V i l l e )
20/169
Optimisation des performances
Optimisation logique
Bilan
Or
La jointure est une opération très coûteuse
Les opérations binaires (qui portent sur deux tables) peuvent
être coûteuses
21/169
Optimisation des performances
Optimisation logique
22/169
Optimisation des performances
Optimisation logique
23/169
Optimisation des performances
Optimisation logique
Données déductibles
les résultats des requêtes les plus fréquentes
des statistiques historiques
des données issues de calculs complexes
24/169
Optimisation des performances
Optimisation logique
25/169
Optimisation des performances
Optimisation logique
26/169
Optimisation des performances
Optimisation logique
26/169
Optimisation des performances
Optimisation logique
26/169
Optimisation des performances
Optimisation logique
26/169
Optimisation des performances
Optimisation logique
27/169
Optimisation des performances
Optimisation logique
28/169
Optimisation des performances
Optimisation logique
28/169
Optimisation des performances
Optimisation logique
29/169
Optimisation des performances
Optimisation logique
Soit la table
ARTICLE ( CodeArt , L i b A r t , . . . , P r i x A r t )
COMMANDE ( NumCom, C o d e C l i ∗ , DateCom )
DETAILCOM ( NumCom, CodeArt ∗ , QtéComDée , P r i x A r t )
30/169
Optimisation des performances
Optimisation logique
31/169
Optimisation des performances
Optimisation logique
32/169
Optimisation des performances
Optimisation logique
WHERE c o n d i t i o n 2 AND c o n d i t i o n 1
33/169
Optimisation des performances
Optimisation logique
33/169
Optimisation des performances
Optimisation logique
Méthodes ensemblistes
SELECT ∗ FROM R1 WHERE A IN (SELECT A FROM R2 ) ;
34/169
Optimisation des performances
Optimisation logique
s e l e c t ∗ from a l l c o n s t r a i n t s t1 , a l l t a b l e s t 2
where t 1 . t a b l e n a m e = t 2 . t a b l e n a m e ;
35/169
Optimisation des performances
Optimisation logique
s e l e c t ∗ from a l l c o n s t r a i n t s where t a b l e n a m e
= any ( s e l e c t t a b l e n a m e from a l l t a b l e s ) ;
s e l e c t ∗ from a l l c o n s t r a i n t s t 1 where e x i s t s
( s e l e c t ∗ from a l l t a b l e s t 2 where
t1 . table name = t2 . table name ) ;
36/169
Optimisation des performances
Optimisation logique
La différence :
R = Différence ( R1, R2 )
37/169
Optimisation des performances
Optimisation logique
38/169
Optimisation des performances
Optimisation logique
Mauvais code :
S e l e c t e . ∗ from EMP e
where e . s a l a r y > (
s e l e c t avg ( s a l a r y ) from EMP i
where i . d e p i d = e . d e p i d ) ;
Bon code
S e l e c t e . ∗ from EMP e ,
( S e l e c t i . d e p i d DEP, avg ( i . s a l a r y ) SAL
from EMP i group by i . d e p i d ) EMP VUE
where e . d e p i d = EMP VUE . d e p i d and
e . s a l a r y > EMP VUE . SAL ;
39/169
Optimisation des performances
Optimisation logique
40/169
Optimisation des performances
Optimisation logique
41/169
Optimisation des performances
Optimisation logique
Inconvénients :
Résultat de la requête stocké et valable à un instant t
en fonction des paramètres, la vue matérialisée sera tenue à
jour ou non quand la table change
Entretien des vues en temps réel : coûteux (et peu souvent
mis en œuvre)
42/169
Optimisation des performances
Optimisation logique
Avantages
Simple réécriture de requête et exécution de requêtes
imbriquées
Lorsqu’il n’est nécessaire de disposer des données en temps
réel, économie d’interrogation
Exemple : analyse de chiffres économiques de la veille
données figées
intérêt à stocker des résultats (qui ne changeront plus !)
Utilisation dans les datawarehouse : problématique de
performances
43/169
Optimisation des performances
Optimisation physique
44/169
Optimisation des performances
Optimisation physique
45/169
Optimisation des performances
Optimisation physique
Etat des lieux : des tables en 3ème FN, ou autre etc. bien
conçues
Objectifs :
optimisation des accès en choisissant les colonnes qui doivent
être indexées
introduction (éventuellement) de redondances calculées
définition de vues standards et des vues matérialisées
définition des contraintes d’intégrité et des déclencheurs sur
les tables
46/169
Optimisation des performances
Optimisation physique
47/169
Optimisation des performances
Optimisation physique
48/169
Optimisation des performances
Optimisation physique
Remarque :
Un vrai SGBD se caractérise par l’emploi d’un SEUL
fichier pour y stocker la BD
(ou éventuellement quelques fichiers si la BD est trop
importante)
Un faux SGBD Relationnel emploie un fichier pour y
stocker une table
dans ce cas la gestion physique des données est assurée par le
système d’exploitation, interdisant tout paramètre
d’optimisation
49/169
Optimisation des performances
Indexation
Méthodes d’accès :
Méthode séquentielle
Méthodes basées sur les index :
Index hiérarchisé,
Arbre-B (B-tree), Arbre-B+, Arbre-B+*, ...
Méthode de hachage
Mise en cluster
50/169
Optimisation des performances
Indexation
51/169
Optimisation des performances
Indexation
52/169
Optimisation des performances
Indexation
250 info k
1610 info n
53/169
Optimisation des performances
Indexation
54/169
Optimisation des performances
Indexation
Index
55/169
Optimisation des performances
Indexation
Index
Exemples
Index simple
c r e a t e i n d e x i d x n o f o u r on t t f o u r ( no four )
Index concaténé
c r e a t e i n d e x idx commande on ( no four , n c l i e n t )
56/169
Optimisation des performances
Indexation
Index
Exemples
index unique
c r e a t e unique i n d e x i d x u n i q u e
on t a b ( c o l 1 ) t a b l e s p a c e t b s t a b 1
p c t f r e e 40
p c t u s e d 60
i n i t r a n s 10
m a x t r a n s 100
index non unique
create index i d x n o n u n i q u e
on t a b ( c o l 1 ) t a b l e s p a c e t b s t a b 1
p c t f r e e 40
p c t u s e d 60
i n i t r a n s 10
m a x t r a n s 100
nologging
57/169
Optimisation des performances
Indexation
Index
manipulations
58/169
Optimisation des performances
Indexation
Index
Manipulation
S e l e c t ∗ from s y s . d b a c l u s t e r s ;
S e l e c t ∗ from s y s . d b a c l u c o l u m n s ;
59/169
Optimisation des performances
Indexation
Index Bitmap
60/169
Optimisation des performances
Indexation
61/169
Optimisation des performances
Indexation
INDEX B-TREE
Préparation de l’utilisation de B-Tree
(à utiliser dans le cas d’une forte cardinalité)
SQL> DESC t 1 0 m a n c o p y
NAME NULL? TYPE
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−− −−−−−−−−−−−−−
EMPNO NOT NULL NUMBER
ENAME VARCHAR2( 2 0 )
JOB VARCHAR2( 1 8 )
MGR NUMBER( 4 )
HIREDATE DATE
SAL NUMBER( 7 , 2 )
COMM NUMBER( 7 , 2 )
DEPTNO NUMBER( 2 )
T a b l e c r e a t e d 0 0 0 0 0 0 0 , 0 0 0 0 0 0 1 , 0 0 0 0 0 0 2 , and 0000003 a r e s c a n n e d by t u r n s
62/169
Optimisation des performances
Indexation
INDEX B-TREE
MGR
−−−−−−−−
0000001
0000002
0000003
0000000
0000001
0000002
0000003
0000000
0000001
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
SQL> CREATE INDEX BTREE 4 ON T10MAN COPY 4 (MGR)
STORAGE ( I N I T I A L 2K NEXT 2K PCTINCREASE 0 MAXEXTENTS UNLIMITED ) ;
63/169
Optimisation des performances
Optimisation des requêtes
Visualisation :
Expression Algébrique
Arbre algébrique
Plan d’exécution de la requête
64/169
Optimisation des performances
Plan d’exécution
Plan d’exécution
Sous Oracle, possibilité de connaı̂tre pour chaque requête son
plan d’exécution
Consultation du plan d’exécution selon lequel une instruction
SQL sera exécutée par le SGBD Oracle dans une table
système
65/169
Optimisation des performances
Plan d’exécution
EXPLAIN PLAN
SET s t a t e m e n t i d= ’ e x e m p l e 1 ’ // i d e n t i f i a n t
FOR // e x e m p l e de r e q u ê t e
SELECT ∗∗∗ FROM ∗∗∗WHERE ∗ ∗ ∗ ;
Exemple :
EXPLAIN PLAN
SET s t a t e m e n t i d = ’ r e q u e t e 1 ’
FOR s e l e c t ∗ from e l e v e s where nom l i k e ’DUPON%’ ;
66/169
Optimisation des performances
Plan d’exécution
Plan d’exécution
-----------------------------------------------
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
67/169
Optimisation des performances
Plan d’exécution
Remarques et explications
Représentation d’une requête par un arbre
Sous Oracle,
possibilité de représentation et de manipulation
de données ayant une structure de données récursive (arbre)
par une représentation tabulaire et avec la commande SQL :
68/169
Optimisation des performances
Plan d’exécution
Exemples de parcours de
structure de données de type récursif
Structures de données récursives de type Arbres
Exemples :
Arbre Généalogique
Nomenclature d’un produit (Composé, Composant)
Oracle offre la commande CONNECT BY
SELECT . . . FROM . . . WHERE . . .
CONNECT BY PRIOR c o l o n n e o p é r a t e u r c o l o n n e
CONNECT BY c o l o n n e o p é r a t e u r PRIOR c o l o n n e
START WITH
LEVEL
69/169
Optimisation des performances
Plan d’exécution
c r e a t e t a b l e PERSONNES (
NUMERO number ( 7 ) , NOM v a r c h a r ( 1 5 ) , PRENOM v a r c h a r ( 1 5 ) ,
DATENAISSANCE date , SEXE c h a r ( 1 ) , PERE number ( 7 ) , MERE number ( 7 ) ,
c o n s t r a i n t PK PERSONNES p r i m a r y key (NUMERO) ,
c o n s t r a i n t FK PERSONNES PERE PERSONNES f o r e i g n key (PERE) r e f e r e n c e s PERSONNES ,
c o n s t r a i n t FK PERSONNES MERE PERSONNES f o r e i g n key (MERE) r e f e r e n c e s PERSONNES ,
c o n s t r a i n t CK SEXE PERSONNES c h e c k ( SEXE i n ( ’M’ , ’ F ’ ) ) );
70/169
Optimisation des performances
Optimisation des requêtes
EXPLAIN PLAN
SET s t a t e m e n t i d = ’ r e q u e t e 1 ’
FOR s e l e c t ∗ from e l e v e s where nom l i k e ’DUPON% ’ ;
Plan d’exécution
-----------------------------------------------
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
71/169
Optimisation des performances
Optimisation des requêtes
EXPLAIN PLAN
SET s t a t e m e n t i d = ’ r e q u e t e 1 ’
FOR s e l e c t ∗ from e l e v e s where nom l i k e ’DUPON% ’ ;
Plan d’exécution
------------------------------------------------
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
72/169
Optimisation des performances
Optimisation des requêtes
Plan d’exécution
---------------------------------------------
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
Plan d’exécution
---------------------------------------------
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
73/169
Optimisation des performances
Optimisation des requêtes
EXPLAIN PLAN
SET s t a t e m e n t i d = ’ r e q u e t e 2 ’
FOR s e l e c t ∗ from e l e v e s where nom l i k e ’DUPON% ’ o r d e r by nom ;
Plan d’exécution
---------------------------------
SELECT STATEMENT
SORT ORDER BY
TABLE ACCESS FULL ELEVES
74/169
Optimisation des performances
Optimisation des requêtes
EXPLAIN PLAN
SET s t a t e m e n t i d = ’ r e q u e t e 2 ’
FOR s e l e c t ∗ from e l e v e s where nom l i k e ’DUPON% ’ o r d e r by nom ;
Plan d’exécution
------------------------------------
SELECT STATEMENT
SORT ORDER BY
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
75/169
Optimisation des performances
Optimisation des requêtes
Plan d’exécution
-----------------------------------------------
SELECT STATEMENT
SORT ORDER BY
TABLE ACCESS FULL ELEVES
Plan d’exécution
---------------------------------------------
SELECT STATEMENT
SORT ORDER BY
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN I_NOM
76/169
Optimisation des performances
Optimisation des requêtes
Plan d’exécution
----------------------------------------------
SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS FULL RESULTATS
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX UNIQUE SCAN PK_ELEVES
77/169
Optimisation des performances
Optimisation des requêtes
Plan d’exécution
----------------------------------------------
SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS FULL ELEVES
TABLE ACCESS BY INDEX ROWID RESULTATS
INDEX RANGE SCAN PK_RESULTATS
78/169
Optimisation des performances
Optimisation des requêtes
79/169
Optimisation des performances
Optimisation des requêtes
80/169
Optimisation des performances
Optimisation des requêtes
Plan d’exécution
----------------------------------------------
SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX UNIQUE SCAN PK_ELEVES
TABLE ACCESS BY INDEX ROWID RESULTATS
INDEX RANGE SCAN PK_RESULTATS
81/169
Optimisation des performances
Outils d’optimisation
Partie 2
Introduction
Présentation
des outils
des méthodes
pour assurer le suivi de la base et garantir sa performance
82/169
Optimisation des performances
Outils d’optimisation
83/169
Optimisation des performances
Optimiseur Oracle
84/169
Optimisation des performances
Optimiseur Oracle
85/169
Optimisation des performances
Optimiseur Oracle
86/169
Optimisation des performances
Optimiseur Oracle
87/169
Optimisation des performances
Optimiseur Oracle
88/169
Optimisation des performances
Optimiseur Oracle
Optimiseur statistique
89/169
Optimisation des performances
Optimiseur Oracle
Optimiseur statistique
Remarques :
Pas de mise à jour régulière des catalogues par Oracle
Le DBA qui doit donc s’en charger
Récupération de la date de dernier calcul des statistiques :
Requête dans la vue DBA_TAB_COLUMNS pour afficher
l’information LAST_ANALYZED
s e l e c t owner , t a b l e n a m e , l a s t a n a l y z e d
from d b a t a b c o l u m n s
where l a s t a n a l y z e d > ’ 01−JAN−00 ’ ;
90/169
Optimisation des performances
Optimiseur Oracle
91/169
Optimisation des performances
Statistiques
92/169
Optimisation des performances
Statistiques
93/169
Optimisation des performances
Statistiques
94/169
Optimisation des performances
Statistiques
95/169
Optimisation des performances
Statistiques
96/169
Optimisation des performances
Statistiques
97/169
Optimisation des performances
Statistiques
98/169
Optimisation des performances
Statistiques
99/169
Optimisation des performances
Statistiques
DBMS STATS
100/169
Optimisation des performances
Statistiques
DBMS STATS
101/169
Optimisation des performances
Statistiques
DBMS STATS
Explications :
La table CONTRAT du user DEV est analysée avec un degré
de parallélisme de 4
Toutes les colonnes sont analysées ainsi que les index
correspondants
L’analyse se fait avec une estimation de 30% au niveau ligne
102/169
Optimisation des performances
Statistiques
DBMS STATS
Syntaxe
BEGIN
END;
103/169
Optimisation des performances
Statistiques
Si les statistiques :
semblent fausses
entraine l’Optimiseur à générer des mauvais plans d’exécution
Il faut restaurez les statistiques d’origines comme suit :
BEGIN
DBMS STATS . DELETE TABLE STATS ( ’ s c o t t ’ , ’ emp ’ ) ;
DBMS STATS . IMPORT TABLE STATS ( ’ s c o t t ’ , ’ emp ’ ,
s t a t t a b => ’ s a v e s t a t s ’ ) ;
END;
104/169
Optimisation des performances
Statistiques
→ Cela dépend
du taux
du volume de changement des données dans la base
105/169
Optimisation des performances
Suivi des Indicateurs
Indicateurs :
Ratios
Alertes (corruption, messages d’erreurs etc.) et les traces
Vues de dépannage et réglage
Tuning des I/O des requêtes couteuses
106/169
Optimisation des performances
Suivi des Indicateurs
Ratios de la base
107/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
108/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
109/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
Remarque :
Au démarrage, le cache du dictionnaire de données est vide
Chaque requête SQL est absente du cache, et entraı̂ne un
défaut
Comme il y devrait y avoir de plus en plus de données lues
dans le cache, le nombre de défaut dans le cache diminuera
La base de données peut atteindre un état stable (steady
state) : les données du dictionnaires les plus fréquemment
utilisées sont dans le cache
110/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
Exemple d’utilisation
s e l e c t sum( g e t s −g e t m i s s e s ) ∗ 1 0 0 /sum( g e t s )
from v $ r o w c a c h e ;
111/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
Sorts in Memory
Mesure de la proportion de données triées qui sont en
mémoire plutôt que sur le disque
Exemple :
s e l e c t r o u n d ( (mem . v a l u e / (mem . v a l u e+d s k . v a l u e ) ) ∗ 1 0 0 , 2 )
from v $ s y s s t a t mem, v $ s y s s t a t d s k
where mem . name= ’ s o r t s ( memory ) ’ and
d s k . name= ’ s o r t s ( d i s k ) ’ ;
112/169
Optimisation des performances
Suivi des Indicateurs
Ratio de la base
Remarques :
Le tri sur disque utilise les tablespaces temporaires
La taille maximal du tri en mémoire est défini par la taille de la
zone de tri (sort area size) – taille dans lequel de PGA est
utilisé
Chaque processus Oracle effectuant un tri réserve autant de
mémoire, même s’il n’en a pas besoin.
L’utilisation de cette mémoire réduit celle disponible pour SGA
Optimisation : augmenter le paramètre SORT_AREA_SIZE
dans init.ora
113/169
Optimisation des performances
Alertes
Les alertes
Fichier alert_ORACLE_SID.log
Exemple : alert_bdaINFO2.log
Contenu d’un fichier d’alerte :
des informations utilisées par le DBA de la base pour une
maintenance, un suivi, ... de la base Oracle
Des traces sont rajoutées dans le fichier Log suite à :
un démarrage de la base,
un arrêt de la base,
une création ou la mise à jour d’un tablespace,
une création, ou la mise à jour d’un rollback segment,
etc ...
114/169
Optimisation des performances
Alertes
Les alertes
115/169
Optimisation des performances
Alertes
116/169
Optimisation des performances
Catalogue Oracle
117/169
Optimisation des performances
Catalogue Oracle
118/169
Optimisation des performances
Catalogue Oracle
119/169
Optimisation des performances
Catalogue Oracle
s e l e c t event , t o t a l w a i t s , a v e r a g e w a i t from v $ s y s t e m e v e n t ;
120/169
Optimisation des performances
Catalogue Oracle
121/169
Optimisation des performances
Catalogue Oracle
122/169
Optimisation des performances
Catalogue Oracle
123/169
Optimisation des performances
Catalogue Oracle
124/169
Optimisation des performances
Optimisation des applications – Recettes
Partitionnement
Exécution parallèle
Tuning des entrées/sorties
Détection des lignes chaı̂nées ou migrées
Détection des Index inutilisés
Réorganisation des index
Utilisation des Hints
Codes SQL à ne pas utiliser
125/169
Optimisation des performances
Optimisation des applications – Recettes
Create t a b l e f a c t u r e
( n u m f a c t number ( 5 ) ,
n u m a r t i c l e number ( 5 ) ,
d a t e v e n t e date
)
P a r t i t i o n by r a n g e ( d a t e v e n t e )
(
p a r t i t i o n p 200312 values l e s s than
( t o d a t e ( ’ 2004−01−01 ’ , ’YYYY−MM−DD ’ ) ) ,
p a r t i t i o n p 200406 values l e s s than
( t o d a t e ( ’ 2004−07−01 ’ , ’YYYY−MM−DD ’ ) ) ,
p a r t i t i o n p 200412 values l e s s than
( t o d a t e ( ’ 2005−01−01 ’ , ’YYYY−MM−DD ’ ) )
)
126/169
Optimisation des performances
Optimisation des applications – Recettes
Create i n d e x i d x t l c n t 1 on t l c n t ( n 0 c n t )
Tablespace tbs index
S t o r a g e ( i n i t i a l 10M next 5M)
parallele 3
Nologging
Local ;
127/169
Optimisation des performances
Optimisation des applications – Recettes
Desc V$filestat
file# : numéro du fichier
phyrds : lecture disque
phywrts : écriture disque
phyblkrd : nbre de block disque lus
phblkwrt : nombre de block disque écrits
readtim : temps de lecture
writetim : temps d’écriture
128/169
Optimisation des performances
Optimisation des applications – Recettes
129/169
Optimisation des performances
Optimisation des applications – Recettes
130/169
Optimisation des performances
Optimisation des applications – Recettes
131/169
Optimisation des performances
Optimisation des applications – Recettes
132/169
Optimisation des performances
Optimisation des applications – Recettes
Stratégies d’indexation
133/169
Optimisation des performances
Optimisation des applications – Recettes
Stratégies d’indexation
Index de fonction :
Create i n d e x i d x c l t s n o m p r e n
on c l i e n t ( upper ( nom ) , prenom ) ;
Create i n d e x i d x c l t s c a
on c l i e n t ( c a l c u l c a ( i d c l i e n t ) ) ;
−−− c a l c u l c a e s t une p r o c é d u r e PL/SQL
134/169
Optimisation des performances
Optimisation des applications – Recettes
Réorganiser/Reconstruire un index ?
EXECUTE d b m s s t a t s . g a t h e r i n d e x s t a t s
( ’SCOTT ’ , ’ INDEX 1 ’ ) ;
135/169
Optimisation des performances
Optimisation des applications – Recettes
Réorganiser/Reconstruire un index ?
S e l e c t name ,
( d e l l f r o w s l e n , / l f r o w s l e n )∗100 moyen del
from i n d e x s t a t s ;
136/169
Optimisation des performances
Optimisation des applications – Recettes
Remarques :
Il est très important de placer le hint à l’emplacement
approprié du code SQL, idéalement avant la référence à la
première colonne du code SQL
Si le hint inclus est incorrect il sera tout simplement ignoré
par l’optimiseur, sans affichage de la moindre erreur !
137/169
Optimisation des performances
Optimisation des applications – Recettes
Instantiation de LE_HINT :
138/169
Optimisation des performances
Optimisation des applications – Recettes
Outils d’aide :
PRECISE : suivi d’une base de production
TOAD : suivi du passage du prototypage à la production
OEM : Oracle Entreprise Manager
etc.
139/169
Optimisation des performances
Optimisation des applications – Recettes
140/169
Optimisation des performances
Optimisation des applications – Recettes
141/169
Optimisation des performances
Optimisation des applications – Recettes
Optimisation :
FIRST_ROWS, ALL_ROWS : Force Oracle à utiliser les premières
ou toutes les lignes
ORDERED : Accès aux tables dans l’ordrede de la clause FROM
Accès: FULL(tab), ROWID, PARALLEL
142/169
Optimisation des performances
Optimisation des applications – Recettes
P l a n d ’ e x é c u t i o n
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX UNIQUE SCAN PK ELEVES
TABLE ACCESS BY INDEX ROWID RESULTATS
INDEX RANGE SCAN PK RESULTATS
6 l i g n e ( s ) s é l e c t i o n n é e ( s ) .
143/169
Optimisation des performances
Optimisation des applications – Recettes
P l a n d ’ e x é c u t i o n
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SELECT STATEMENT
HASH JOIN
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX RANGE SCAN PK ELEVES
TABLE ACCESS BY INDEX ROWID RESULTATS
INDEX RANGE SCAN PK RESULTATS
6 l i g n e ( s ) s é l e c t i o n n é e ( s ) .
144/169
Optimisation des performances
Optimisation des applications – Recettes
Sans le Hint :
P l a n d ’ e x é c u t i o n
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
SELECT STATEMENT
NESTED LOOPS
TABLE ACCESS BY INDEX ROWID ELEVES
INDEX UNIQUE SCAN PK ELEVES
TABLE ACCESS BY INDEX ROWID RESULTATS
INDEX RANGE SCAN PK RESULTATS
145/169
Optimisation des performances
Optimisation des applications – Recettes
146/169
Optimisation des performances
Optimisation des applications – Recettes
147/169
Optimisation des performances
Optimisation des applications – Recettes
148/169
Optimisation des performances
Optimisation des applications – Recettes
149/169
Optimisation des performances
Optimisation des applications – Recettes
Begin
I n s e r t i n t o Z s e l e c t c o l 1 , c o l 2 ∗ 1 . 5 from X where ;
Commit ;
End ; −− Bon
150/169
Optimisation des performances
Optimisation des applications – Recettes
S e l e c t e . ∗ from EMP e ,
( s e l e c t i . d e p t i d DEP , avg ( i . s a l a r y ) SAL from EMP I
group by d e p t i d ) EMP VUE
where e . d e p t i d = EMP VUE . d e p t i d and
e . s a l a r y > EMP VUE . SAL ; −− Bon
151/169
Optimisation des performances
Optimisation des applications – Recettes
C r e a t e t a b l e X ( c o l 1 number , c o l 2 v a r c h a r 2 ( 3 0 ) ... )
as s e l e c t col1 , c o l 2
from Y . . . ; −− Bon
152/169
Optimisation des performances
Optimisation des applications – Recettes
For i i n 1 . . 1 0 0 0 0 l o o p
I n s e r t i n t o X v a l u e s (SEQ . NEXTVAL, ... );
End l o o p ; −− Bon
153/169
Optimisation des performances
Optimisation des applications – Recettes
154/169
Optimisation des performances
Optimisation des applications – Recettes
155/169
Optimisation des performances
Optimisation des applications – Recettes
156/169
Optimisation des performances
Optimisation des applications – Recettes
157/169
Optimisation des performances
Optimisation des applications – Recettes
158/169
Optimisation des performances
Optimisation des applications – Recettes
159/169
Optimisation des performances
Optimisation des applications – Recettes
160/169
Optimisation des performances
Optimisation des applications – Recettes
161/169
Optimisation des performances
Optimisation des applications – Recettes
162/169
Optimisation des performances
Optimisation des applications – Recettes
163/169
Optimisation des performances
Optimisation des applications – Recettes
164/169
Optimisation des performances
TKPROF
TKPROF
s e t a u t o t r a c e on
165/169
Optimisation des performances
TKPROF
Exemple de TKPROF
166/169
Optimisation des performances
TKPROF
167/169
Optimisation des performances
TKPROF
168/169
Utilitaires et Outils d’optimisation
TOAD
OEM
TKPROF (outil capable de générer des traces)
UTLBSTAT/UTLESTAT
STATPACK (UTL et STAT sont des outils équivalents qui
permettent de recenser les requêtes les plus consommatrices)
Scripts du DBAs (le DBA doit développer ses scripts)
169/169