Bases de Données Avancées



Documents pareils
Bases de Données Avancées

TP Contraintes - Triggers

Optimisation SQL. Quelques règles de bases

Bases de Données Avancées

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

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

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

Auto-évaluation Oracle: cours de base

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

Le Langage De Description De Données(LDD)

TP11 - Administration/Tuning

Bases de Données Avancées

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

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

Notion de base de données

Master Exploration Informatique des données DataWareHouse

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

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

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

Oracle Maximum Availability Architecture

Le Langage SQL version Oracle

Langage SQL : créer et interroger une base

CYCLE CERTIFIANT ADMINISTRATEUR BASES DE DONNÉES

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

Administration des bases de données relationnelles Part I

Introduction aux SGBDR

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

CHAPITRE 1 ARCHITECTURE

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Devoir Data WareHouse

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

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

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

Bases de données et sites WEB

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Du 10 Fév. au 14 Mars 2014

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

Gestion des utilisateurs et de leurs droits

Bases de Données Avancées

Bases de données relationnelles

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

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

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

TP Bases de données réparties

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

Administration de Bases de Données : Optimisation

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

TP Administration Oracle

PERFORMANCE BASE DE DONNÉES

1. Qu'est qu'un tablespace?

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

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

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

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

Les bases de l optimisation SQL avec DB2 for i

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

Administration des bases de données sous Oracle. 10g. Fabien De Marchi, Jean-Marc Petit. Université de Lyon. November 22, /96

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Le langage SQL Rappels

A QUOI SERVENT LES BASES DE DONNÉES?

<Insert Picture Here> Solaris pour la base de donnés Oracle

3. La SGA ou System global Area

Les bases de données

Information utiles. webpage : Google+ : digiusto/

Quelques aspects du Relationnel-Objet du SGBD Oracle

A QUOI SERVENT LES BASES DE DONNÉES?

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Optimisations des SGBDR. Étude de cas : MySQL

Structure fonctionnelle d un SGBD

Gestion de base de données

Bases de Données Réparties

Cours Bases de données

Mise en oeuvre TSM 6.1

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

Secteur Tertiaire Informatique Filière étude - développement. Accueil. Apprentissage. Période en entreprise. Evaluation.

SQL Historique

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

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

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

CREATION WEB DYNAMIQUE

Département Informatique de l Institut Universitaire de Technologie de l Université Bordeaux 1 Bases de Données Oracle : administration (cours)

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

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

Corrigés détaillés des exercices

Oracle : Administration

1 Introduction et installation

Cours 4. Gestion de la performance. DBA - Maîtrise ASR - Université Evry

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

OpenPaaS Le réseau social d'entreprise

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

Compétences Business Objects

Sybase Adaptive Server Enterprise 15

Administration de Base de Données Notes de cours

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

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Transcription:

1/210 Bases de Données Avancées Optimisation Thierry Hamon Bureau H202 - Institut Galilée Tél. : 33 1.48.38.35.53 Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F-93017 Bobigny cedex Tél. : 33 1.48.38.73.07, Fax. : 33 1.48.38.73.55 thierry.hamon@univ-paris13.fr http://www-limbio.smbh.univ-paris13.fr/membres/hamon/bda-20112012 INFO2 BDA

2/210 Introduction Optimisation d une Application? Quand décide-t on d optimiser? Optimiser quoi? Qui participe, et Comment? Type de l application (TP ou Batch) Intérêt de l application pour l entreprise

3/210 Introduction Quand décide-t on d optimiser? 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.)

4/210 Acteurs Qui participe et pourquoi? Adminstrateurs de DB, Développeurs, Ingénieurs Système (IS), Chef de projet Définition de la puissance de la machine (Nombre de processeurs, Capacité mémoire, Espace disque nécessaire en fonction du type de l application) Type du SGBD (Oracle, DB2, etc.) Type de l application (Batch, TP) Langage de programmation utilisé (Java, PL/SQL, etc.)

5/210 Acteurs Rôle d un Administrateur d une Base de Données (ABD ou DataBase Administrator DBA) Double rôle de l administrateur d une Base de Données : rôle organisationnel Définition du schéma conceptuel des données Partage de ces données par les utilisateurs rôle technique Mise en œuvre ce schéma partage à l aide des capacités techniques du SGBD

6/210 Acteurs Rôle d un Administrateur d une Base de Données rôle technique Installation du SGBD et des outils associés Création de la BD et ses composants conformément à un schéma conceptuel Surveillance de son évolution en modifiant, en créant ou en supprimant certaines structures Gestion des privilèges d accès Attribution et retrait de privilèges d accès aux données aux différents utilisateurs de la base de données

7/210 Acteurs Rôle d un Administrateur d une Base de Données rôle technique Amélioration les performances Choix de l implantation optimale des données de façon à obtenir les meilleures performances Identification et prise en compte des utilisations qui seront faites des données Surveillance de la sécurité et la cohérence des données Mise en place de structures et de procédures permettant de faire face à tous les incidents de retrouver l intégrité et la cohérence des données

8/210 Acteurs Rôle d un Administrateur d une Base de Données rôle technique Échange les données entre la BD et le monde extérieur Surveillance de l intégration des données en provenance d autres applications ou BD Migration des données de la base vers d autres applications ou BD Outils à utiliser : SQL*DBA, SQL*Loader, SQLPLUS, etc.

9/210 Objectifs Qu est-ce qui reste à faire? Les besoins en puissance machine définis Les acteurs administrateurs BD, (IS), développeurs, etc. au courant du projet (impliqués, responsable de la réussite du projet,..) Optimisation de la base et de l application?

10/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 1 : Conception des systèmes d informations et optimisation des applications Lors de la conception des systèmes d informations (si pas trop tard) Optimisation des applications Partie N 2 : Présentation des outils pour assurer le suivi de la base et garantir sa performance Optimisation de la mémoire Optimisation des entrées/sorties Disque Identifier les contentions dans la base de données

11/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 1 : Conception des systèmes d informations et optimisation des applications Lors de la conception des systèmes d informations : (Si pas trop tard) Système non performant : résultat d une mauvaise définition du modèle conceptuel Modèle conceptuel : au moins sous la 3ème forme Normale (3NF) Sauf dans quelque cas (choix volontaire) où la dé-normalisation apporte une certaine performance au système d information (Dataware house) Lors de la conception : tenir compte l accès aux données Analyse de la répartition des données : réplication de données (sur une ou plusieurs bases, etc.) agrégation des tables, pour les systèmes décisionnels etc.

11/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 1 : Conception des systèmes d informations et optimisation des applications Optimisation des applications : l expérience montre que 80% des problèmes de performances des applications, sont résolus, par une optimisation des requêtes SQL Ordonnancer les Batchs et éviter leur exécution pendant des heures ou l utilisation des machine est intense Dispatcher les Batchs les plus consommateurs en puissance machine à des heures différentes

12/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 2 : Présentation des outils pour assurer le suivi de la base et garantir sa performance Optimisation de la mémoire : déterminer la bonne taille des buffers de la base (shared_pool, buffer cache, log buffer, etc) par l utilisation des outils tels que Utlbstat/Utlestat, ou Statpack, etc.

12/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 2 : Présentation des outils pour assurer le suivi de la base et garantir sa performance Optimisation des entrées/sorties Disque : Bien dimensionner les fichiers de la base de données et placer dans des disques prévus pour le type d application (Batch ou TP), pour assurer un temps de réponse acceptable des requêtes adressées à la Base. Ne pas oublier de recenser les disques les plus sollicités, les tablespaces les plus fragmentés, full table scan, etc.

12/210 Objectifs Sur quoi doit-on focaliser les efforts d optimisation? Partie N 2 : Présentation des outils pour assurer le suivi de la base et garantir sa performance Identifier les contentions dans la base de données : Etudier les locks, les latches et les wait events au niveaux de la base de données, et les éliminer si possible

13/210 Conception des SI et optimisation des Applications Partie 1 Lors de la conception des systèmes d informations Optimisation des applications : L expérience montre que l optimisation des requêtes SQL résout la majorité des problèmes de performances des applications

14/210 Conception des SI et optimisation des Applications Objectifs de l optimisation Clarifier et situer les différents paramètres internes des SGBD (relationnel ; objet-relationnel) afin d améliorer leurs performances. Réécrire les codes SQL ; PL/SQL etc.. Restructurer les données, indexer les données, créer des vues matérialisées Partager les données, dupliquer les données sur plusieurs disques, créer des partitions sur les données

15/210 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

16/210 Conception des SI et optimisation des Applications Augmentation des performances Pour augmenter les performances trois grandes solutions apparaissent : 1 Première solution (d ordre logique) : optimiser les schémas conceptuel et logique pour qu il colle aux applications 2 Deuxième solution (d ordre physique) : optimiser les paramètres internes du SGBD 3 Autre solution (de type matérielle) : augmenter la puissance machine ou utiliser des ordinateurs spéciaux dédiés à la gestion des données. Cette approche est plus connue sous le nom Machine Bases de Données

17/210 Optimisation logique Optimisation logique de la Base de Données Optimisation du Schéma Relationnel Schéma Conceptuel de Données (SCD), obtenu à la phase d analyse une ensemble d Entités et d Associations ou un ensemble de Classes selon le formalisme utilisé En EA, transformation en schéma relationnel (Schéma Logique de Données SLD), qui permet Implantation du SCD dans une BD relationnelle Exploitation par le SGBD et les modules de programmation

18/210 Optimisation logique Optimisation logique de la Base de Données Optimisation du Schéma Relationnel Normalisation : processus permettant de s assurer de la Bonne conception du SLD non redondance de ses données Cadre formel pour effectuer la normalisation : la dépendance fonctionnelle les formes normales (1ère FN, 2ème FN, 3ème FN, FNBC, 4ème FN,...)

19/210 Optimisation logique Avant normalisation : Normalisation Exemple R e l a t i o n 1 ( A t t r i b u t 1, A t t r i b u t 2,... ) Décomposition de la relation Relation1, en deux ou plusieurs relations qui contiennent moins d anomalies de mises à jour (peu ou pas du tout) : On parle de Décomposition sans perte d information Décomposition sans perte de dépendance fonctionnelle (DF)... Après normalisation : R e l a t i o n 1 1 ( A t t r i b u t 1 1, A t t r i b u t 1 2,... ) R e l a t i o n 2 1 ( A t t r i b u t 2 1, A t t r i b u t 2 2,... )

20/210 Optimisation logique Normalisation Les relations obtenues doivent être en 3ème Forme Normale, au moins bon rapport redondance/espace occupé Clé Primaire Pas de DF entre les attributs de la clé primaire ; Pas de DF entre un sous ensemble d attributs de la clé primaire et les attributs qui n appartiennent pas à la clé primaire Pas de DF entre les attributs qui n appartiennent pas à la clé primaire

21/210 Optimisation logique Normalisation Illustration Format d une relation bien conçue

22/210 Optimisation logique Normalisation Exemple Soit la relation : ADRESSES ( V i l l e, Numéro, Rue, CodePostal ) Décomposition de la relation ADRESSES ( r e l a t i o n en 3ème FN) en deux relations CPR et CPV (en FN de Boyce et Codd) : CPR ( CodePostal, Rue ) CPV ( CodePostal, V i l l e )

23/210 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

24/210 Optimisation logique Normalisation Exemple Un client a une adresse : SLD version 1 CLIENT ( CodeCli, NomCli, PrénomCli, Numéro, Rue, CodePostal, V i l l e ) SELECT FROM CLIENT ; SLD version 2 CLIENT ( CodeCli, NomCli, PrénomCli, Numéro, A d r C l i ) ADRCPR ( AdrCli, Rue, CodePostal ) ADRCPV ( CodePostal, V i l l e ) SELECT FROM CLIENT, ADRCPR, ADRCPV WHERE CLIENT. A d r C l i=adrcpr. A d r C l i AND ADRCPR. CodePostal=ADRCPV. CodePostal ;

25/210 Optimisation logique Bilan Un schéma relationnel normalisé contiendra donc un nombre plus important de relations (de tables) pourra ainsi pénaliser certaines requêtes, qui seront obligées de procéder à des jointures plus nombreuses sur la base Or La jointure est une opération très coûteuse Les opérations binaires (qui portent sur deux tables) peuvent être coûteuses

26/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée Technique d optimisation des requêtes d interrogation Introduction volontairement de redondances dans le schéma logique relationnel Cette redondance est dite calculée car elle tient compte des besoins des modules de traitement des données de leurs exigences en terme de temps de réponse

27/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée Deux méthodes de réalisation de la redondance calculée : le stockages des données déductibles la dé-normalisation

28/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Données déductibles les résultats des requêtes les plus fréquentes des statistiques historiques des données issues de calculs complexes

29/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Dans les trois cas, stockage des données, physiquement dans la base (sous la forme de Tables/Vues ou de Colonnes) Avantage du stockage physique : éviter leur re-génération en cas de besoin Inconvénient de la redondance : 1 Place occupée par les données redondante 2 Nécessité de traitements supplémentaires pour les opérations de mises à jour 3 Risque d incohérence

30/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Exemple de requête fréquente Base de données SportAct : Adhérents à des centres sportifs CENTRE ( NumC, NomC, V i l l e C, C o u t i n s c ) ESTMEMBRE ( NumA, NumC, D a t e i n s c ) Requête fréquente : Nombre d inscrits dans un centre c? SELECT C.NumC, C.NomC, COUNT(E.NumA) FROM CENTRE C, ESTMEMBRE E WHERE C.NumC = E.NumC AND C.NumC= c GROUP BY C.NumC ;

30/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Exemple de requête fréquente Création d une nouvelle colonne NbrInscr dans la table CENTRE : CENTRE ( NumC, NomC, VilC, Coutinsc, N b r I n s c r ) Nouvel ordre SQL : SELECT NumC, NomC, N b r I n s c r FROM CENTRE WHERE NumC=c ; Suppression de 2 opérations très coûteuses : Une jointure en moins Un groupement en moins

30/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Exemple de requête fréquente Impact sur le reste de la base de données Prise en compte de cette nouveauté par les opérations de mises à jours de la table ESTMEMBRE Modification de la colonne NbrInscr à chaque insertion ou suppression d inscription La cohérence est affectée si on ne le fait pas

30/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Exemple de requête fréquente Chaque opération INSERT / DELETE implique une opération UPDATE INSERT INTO ESTMEMBRE VALUES (...) ; doit être accompagnée par UPDATE CENTRE SET N b r I n s c r=n b r I n s c r+1 ; DELETE FROM ESTMEMBRE WHERE... ; doit être accompagnée par UPDATE CENTRE SET N b r I n s c r=n b r I n s c r 1 ;

31/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Exemple de Statistiques Historiques Requête : Nombre d inscrits par centre et par mois? Objectif : éviter le recalcul à chaque fois du nombre d inscrits par centre et par mois Solution : création d une nouvelle table/vue STAT_MENS_INSCR STAT MENS INSCR ( NumC, Mois, N b r I n s c r ) Nécessité d un nouveau traitement mensuel pour l actualiser avec les statistiques du mois écoulé

32/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Résultat de calcul complexe Soit la base de données : CLIENT ( CodeCli, NomCli,... ) ARTICLE ( CodeArt, LibArt,..., P r i x A r t ) COMMANDE ( NumCom, CodeCli, DateCom ) DETAILCOM ( NumCom, CodeArt, QtéComDée ) Requête : Montant de la commande?

32/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : stockages des données déductibles Résultat de calcul complexe Obtention du montant de la commande : SELECT C.NumCom, SUM(D. QtéComDée A. P r i x A r t ) AS Montant FROM COMMANDE C, ARTICLE A, DETAILCOM D WHERE C. NumCom=D. NumCom AND D. CodeArt=A. CodeArt GROUP BY C. NumCom ; Gain d opération avec la création de la colonne Montant dans la table COMMANDE COMMANDE ( NumCom, CodeCli, DateCom, Montant ) SELECT NumCom, Montant FROM COMMANDE ;

33/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : dé-normalisation Autre méthode d optimisation des interrogations Transformer, si besoin est, une table de la 3ème FN en 2ème FN ou en la 1ère FN Objectif : éviter des jointures successives pouvant être coûteuses en performances

34/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : dé-normalisation Exemple Soit la table ARTICLE ( CodeArt, LibArt,..., P r i x A r t ) COMMANDE ( NumCom, CodeCli, DateCom ) DETAILCOM ( NumCom, CodeArt, QtéComDée, P r i x A r t ) DETAILCOM passe de la 3ème FN à la 1ère FN Requête : Montant de la commande? SELECT NumCom, SUM( QtéComDée P r i x A r t ) FROM DETAILCOM GROUP BY NumCom ; AS Montant

35/210 Optimisation logique Optimisation logique de la Base de Données Redondance calculée : dé-normalisation Inconvénients de la dé-normalisation : identiques à ceux du stockage des données déductibles Place supplémentaire Pénalisation des traitements d insertion et de suppression Risque d incohérence Nécessite la création de déclencheurs (triggers)

36/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Requête SQL : ordre passé au SGBD pour lui demander de rechercher des données spécifiées dans la requête (sans expliciter le comment) SQL est non procédural SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY DISTINCT SUM / MIN / MAX / AVG / COUNT IN / NOT IN / LIKE / NOT LIKE / EXISTS / NOT EXISTS / = INSERT / DELETE / UPDATE CREATE / TABLE / VIEW / INDEX

37/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Traduction d une requête exprimée en langage naturel en un ensemble d ordres SQL Plusieurs agencements sont souvent possibles : au niveau de l ordre dans lequel les conditions sont exprimées dans la clause WHERE : WHERE c o n d i t i o n 1 AND c o n d i t i o n 2 WHERE c o n d i t i o n 2 AND c o n d i t i o n 1

37/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Traduction d une requête exprimée en langage naturel en un ensemble d ordres SQL Plusieurs agencements sont souvent possibles : au niveau des opérations algébriques Possibilité d utiliser plusieurs méthodes différentes pour exprimer la même chose La jointure : possibilité d exprimer la opération de plusieurs façons différentes R = Jointure ( R1, R2, {R1.A=R2.A} ) = Jointure ( R2, R1, {R2.A=R1.A} ) SELECT FROM R1, R2 WHERE R1. A = R2. A ; SELECT FROM R2, R1 WHERE R2. A = R1. A ;

38/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Expression de la jointure Méthode prédicative SELECT FROM R1, R2 WHERE R1. A=R2. A ; Méthodes ensemblistes SELECT FROM R1 WHERE A IN (SELECT A FROM R2 ) ; SELECT FROM R1 WHERE A =ANY (SELECT A FROM R2 ) ; SELECT FROM R1 WHERE EXISTS (SELECT FROM R2 WHERE R1. A=R2. A ) ; SELECT FROM R1 WHERE 0 < (SELECT COUNT( ) FROM R2 WHERE R1. A=R2. A ) ;

39/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple de durée d exécution SQLPlus SET TIMING ON Exécution de la requête ; SELECT... FROM... Oracle vous donne le temps écoulé Méthode prédicative : s e l e c t from a l l t a b l e s t1, a l l c o n s t r a i n t s t2 where t1. table name = t2. table name ; temps CPU: 1 091 480 u n i t é s 451 100 u n i t é s 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 t2 where t1. table name = t2. table name ; temps CPU: 976 790 u n i t é s 690 690 u n i t é s

40/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple de durée d exécution SQLPlus Méthodes ensemblistes : 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 i n ( 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 ) ; temps CPU: 138 350 u n i t é s 139 230 u n i t é s 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 ) ; temps CPU: 139 630 u n i t é s 139 890 u n i t é s s e l e c t from a l l c o n s t r a i n t s t1 where e x i s t s ( s e l e c t from a l l t a b l e s t2 where t1. t a b l e n a m e = t2. t a b l e n a m e ) ; temps CPU: 177 580 u n i t é s 181 360 u n i t é s

41/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Traduction d une requête exprimée en langage naturel en un ensemble d ordres SQL : Plusieurs agencements sont souvent possibles Possibilité d utiliser plusieurs méthodes différentes pour exprimer la même chose La différence : R = Différence ( R1, R2 ) SELECT FROM R1 MINUS SELECT FROM R2 ;

42/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Expression de la différence SELECT A FROM R1 MINUS SELECT A FROM R2 ; SELECT A FROM R1 WHERE A NOT IN (SELECT A FROM R2 ) ; SELECT A FROM R1 WHERE NOT EXISTS (SELECT A FROM R2 WHERE R1. A=R2. A ) ; SELECT A FROM R1 WHERE 0 = (SELECT COUNT( ) FROM R2 WHERE R1. A=R2. A ) ;

43/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Utilisation des vues 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 ;

44/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Vues matérialisées Présentation des vues matérialisées : Création d une vue physique d une table Duplication des données Définition de vues matérialisées à partir de tables, de vues, et de vues matérialisées Possibilité de décalage entre la table maître et la vue matérialisée : gestion de la fraicheur des données de la vue matérialisée (refresh)

45/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Vues matérialisées Utilisation des vues matérialisées : Optimisation/amélioration des performances Ré-écriture de les requêtes portant sur des tables select particulièrement complexe ou lourd réplication de table

46/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées Soit le schéma logique de données suivant :

47/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées Soit la requête Q : Total des ventes des magasins en France ou en Belgique -pour la période de 2001 à 2003- par ville et année s e l e c t ADRVILLEMAG, ANNEET, sum(montantvente) as Montant from VENTES, MAGASINS, TEMPS where VENTES.NUMMAG=MAGASINS.NUMMAG and VENTES. IDTEMPS=TEMPS. IDTEMPS and ( upper (MAGASINS. ADRPAYSMAG)= FRANCE or upper (MAGASINS. ADRPAYSMAG)= BELGIQUE ) and TEMPS. ANNEET between 2001 and 2003 group by ADRVILLEMAG, ANNEET ;

48/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées V1 : Total des ventes des magasins à partir de 2002, par ville et année c r e a t e m a t e r i a l i z e d view v1 ( V i l l e, Annee, Montant1 ) as ( s e l e c t ADRVILLEMAG, ANNEET, sum (MONTANTVENTE) from VENTES, MAGASINS, TEMPS where VENTES.NUMMAG=MAGASINS.NUMMAG and VENTES. IDTEMPS=TEMPS. IDTEMPS and TEMPS. ANNEET >= 2002 group by ADRVILLEMAG, ANNEET ) ;

48/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées V2 : Total des ventes des magasins en France par ville, année et mois c r e a t e m a t e r i a l i z e d view v2 ( V i l l e, Annee, Mois, Montant2 ) as ( s e l e c t ADRVILLEMAG, ANNEET, MOIST, sum (MONTANTVENTE) from VENTES, MAGASINS, TEMPS where VENTES.NUMMAG=MAGASINS.NUMMAG and VENTES. IDTEMPS=TEMPS. IDTEMPS and upper (MAGASINS.ADRPAYSMAG)= FRANCE group by ADRVILLEMAG, ANNEET, MOIST ) ;

48/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées V3 : Total des ventes des magasins en Belgique avant 2001 par ville, année et mois c r e a t e m a t e r i a l i z e d view v3 ( V i l l e, Annee, Mois, Montant3 ) as ( s e l e c t ADRVILLEMAG, ANNEET, MOIST, sum (MONTANTVENTE) from VENTES, MAGASINS, TEMPS where VENTES.NUMMAG=MAGASINS.NUMMAG and VENTES. IDTEMPS=TEMPS. IDTEMPS and upper (MAGASINS.ADRPAYSMAG)= BELGIQUE and TEMPS. ANNEET <= 2001 group by ADRVILLEMAG, ANNEET, MOIST ) ;

49/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Exemple d utilisation de vues matérialisées Soit la requête Q qui utilise des vues matérialisées : s e l e c t ADRVILLEMAG, annee, Montant1 from v1, ( s e l e c t d i s t i n c t ADRVILLEMAG from MAGASINS where upper (MAGASINS.ADRPAYSMAG)= FRANCE or upper (MAGASINS.ADRPAYSMAG)= BELGIQUE ) where v1. v i l l e = s1. ADRVILLEMAG and annee <= 2003 union s e l e c t v i l l e, annee, sum ( Montant2 ) from v2 where annee =2001 group by v i l l e, annee union s e l e c t s2. ADRVILLEMAG, Annee, sum ( Montant3 ) from v3, ( s e l e c t d i s t i n c t ADRVILLEMAG from MAGASINS) s2 where v3. v i l l e = s2. ADRVILLEMAG and annee = 2001 group by s2. ADRVILLEMAG, annee ; s1

50/210 Optimisation logique Optimisation logique de la Base de Données Optimisation des ordres SQL Utilisation de vues matérialisées 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)

51/210 Optimisation logique Avantages Optimisation logique de la Base de Données Optimisation des ordres SQL Utilisation de vues matérialisées 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 pas!) Utilisation dans les datawarehouse : problématique de performances

52/210 Optimisation physique Gestion physique des données Adaptation et enrichissement du SLD pour tenir compte des spécificités du SGBD des performances des traitements et de la sécurité A ce stade d élaboration du schéma physique de données, on dispose : du SLD normalisé ou non du schéma physique de traitement (description détaillée des modules)

53/210 Optimisation physique Gestion physique des données Résultat : Schéma Physique des Données (SPD) représentation de la structure définitive de la base de données telle qu elle doit être implantée prise en compte des caractéristiques technique du SGBD et du matériel des exigences en interfaces et en performances des modules de programmation Si le matériel ou le SGBD change alors il faut changer le SPD (les exigences changent)

54/210 Optimisation physique Gestion physique des données 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

55/210 Optimisation physique Gestion physique des données création des tables et des colonnes techniques définition des droits d accès aux données répartition des tables sur les sites (en cas de BD réparties) calcul des paramètres de stockage des tables et des index etc.

56/210 Optimisation physique Gestion physique des données Colonnes à indexer les clés primaires (concaténées ou pas) pour garantir l unicité et accélérer les recherches INDEX UNIQUE les clés étrangères (concaténées ou pas) pour accélérer les jointures INDEX NOT UNIQUE les colonnes servant de critères de recherche (apparaissent souvent dans la clause WHERE de SQL) INDEX NOT UNIQUE

57/210 Optimisation physique Gestion physique des données Colonnes à indexer 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

58/210 Indexation Gestion des méthodes d accès aux données 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

59/210 Indexation Données (110 octets) Index (14 octets) Clé primaire Info. compl. Clé primaire Adresse physique (10 octets) (100 octets) (10 octets) (4 octets) 10 info1 10 @1 15 info2 10 @2 20 info3 10 @3 30 info4 10 @4 40 info5 10 @5 50 50 55 55 77 77 80 80 10 10 150 150 250 info k 250 @k 1610 info n 1610 @n

60/210 Indexation Données (110 octets) Index (14 octets) Clé primaire Info. compl. Clé primaire Adresse physique (10 octets) (100 octets) (10 octets) (4 octets) 10 info1 30 @Bloc1 15 info2 77 @Bloc2 20 info3 150 @Bloc3 30 info4 1610 @Bloc4 40 info5 50 info6 55 info7 77 info8 80 info9 10 info10 150 info11 250 info k 1610 info n

61/210 Indexation Taille d une Table & Taille d un Index Exemple Table (110 octets par enregistrement) : Clé primaire (10 octets), Informations complémentaires (100 octets) Index (14 octets par enregistrement) : Clé primaire (10 octets), Adresse Physique (4 octets) Bloc de 512 octets Nombre d enregistrements de l ordre de 100 000

62/210 Indexation Taille d une Table & Taille d un Index Exemple Pour les données : Pour un nombre entier d enregistrements par bloc (512/110) Nombre maximal d enregistrements par bloc est 4 Il faudrait donc (100 000/4) = 25000 blocs de données Pour les index : Pour un nombre entier d enregistrements par bloc (512/14) Nombre maximal d enregistrements par bloc est 36 Il faudrait donc (100 000/36) = 2778 blocs d index

63/210 Indexation Index type B-arbre (B-tree) Exemple

64/210 Indexation Index Différents types d index : Logique Index simple (sur une colonne) Index concaténé (sur plusieurs colonne) Index unique (colonne ne comportant pas de doublon) Index non unique (colonne comportant des doublons) Physique B-tree Bitmap Hash

65/210 Indexation Index Exemples Index simple create index i d x n o f o u r on t t f o u r ( n o f o u r ) Index concaténé create index idx commande on ( n o f o u r, n c l i e n t )

66/210 Indexation index unique Index Exemples create unique index i d x u n i q u e on tab ( 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 maxtrans 100 index non unique create unique index i d x u n i q u e on tab ( 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 maxtrans 100 n o l o g g i n g

67/210 Indexation Index manipulations Modification d un Index Alter Index schema. name index i n i t r a n s i n t e g e r maxtrans i n t e g e r s t o r a g e ( i n i t i a l 100M next 20M) l o g g i n g n o l o g g i n g Reconstruction d un Index Alter Index p1. IDX FOUR R e b u i l d T ablespace TBS INDEXES

68/210 Indexation Modification d un Index Index Manipulation Alter Index schema. name index i n i t r a n s i n t e g e r maxtrans i n t e g e r s t o r a g e ( i n i t i a l 100M next 20M) l o g g i n g n o l o g g i n g Catalogue Oracle pour la gestion des Index et des Clusters Select from s y s. d b a u s e r s ; Select from s y s. d b a i n d e x c o l u m n s ; Select from s y s. d b a c l u s t e r s ; Select from s y s. d b a c l u c o l u m n s ;

69/210 Indexation Index Bitmap Création d un index Bitmap (pour faible cardinalité) create bitmap index on t t f o u r ( d t l i v r a i s o n ) t a b l e s p a c e TBS Fournisseur ;

70/210 Indexation Création du cluster INDEX HASH Cluster Create c l u s t e r c l i e n t h a s h ( Num cli number ( 9 ) s i z e 512 HASHKEY 500 s t o r a g e ( i n i t i a l 2M next 1M) Mise en cluster d une table Create table C l i e n t ( N c l i number, nom varchar2 ( 5 0 ) ) Cluster c l i e n t h a s h ( N c l i ) ; Création de l index sur le cluster Create index I d x C l i e n t on c l u s t e r c l i e n t h a s h ;

Indexation INDEX B-TREE Préparation de l utilisation de B-Tree (à utiliser dans le cas d une forte cardinalité) SQL> DESC t10man copy 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 ) EMPNO r a n g e s from 1 to 100000. I use t h i s t a b l e to c r e a t e MGR row w i t h c a r d i n a l i t y 4. I use MOD function. MOD (m, n ) f u n c t i o n r e t u r n s a r e m a i n i n g o f m d i v i d e d by n. I a l s o use to char to make column length even. SQL to make data i n MGR row be c a r d i n a l i t y 4 SQL> CREATE TABLE T10MAN COPY 4 AS SELECT EMPNO,ENAME, JOB, to char (mod(empno, 4 ), 0000000 ) MGR, HIREDATE, SAL,COMM,DEPTNO FROM T10MAN ORG ; 71/210 Table created 0000000, 0000001, 0000002, and 0000003 a r e scanned by turns

72/210 Indexation INDEX B-TREE Création d un index B-Tree SQL> SELECT MGR FROM T10MAN COPY 4 WHERE ROWNUM < 10 ; MGR 0000001 0000002 0000003 0000000 0000001 0000002 0000003 0000000 0000001 SQL> CREATE INDEX BTREE 4 ON T10MAN COPY 4(MGR) STORAGE ( INITIAL 2K NEXT 2K PCTINCREASE 0 MAXEXTENTS UNLIMITED) ;

73/210 Optimisation des requêtes Optimisation des requêtes Exemples d optimisation Algorithmique Algorithme des boucles imbriquées de la jointure BI-passe Algorithme Multi-Passes de la jointure MP

74/210 Optimisation des requêtes Jointure Bi-passe Hashage de deux tables en paquets de mémoire virtuelle Début A l g o r i t h m e BI : POUR i DE 1 à n1 FAIRE DEBUT LIRE Page de R1 POUR j de 1 à n2 FAIRE DEBUT LIRE Page de R2 S I R1. A=R2. A ALORS C r é e r r é s u l t a t FINSI FIN FIN Fin A l g o r i t h m e BI :

75/210 Optimisation des requêtes Jointure Multi-Passe Début A l g o r i t h m e MP : POUR i DE 1 à m FAIRE DEBUT CHARGE MEMOIRE( ) POUR j de 1 à n2 FAIRE DEBUT LIRE Page de R2 S I R1. A=R2. A ALORS C r é e r r é s u l t a t FINSI FIN FIN CHARGER MEMOIRE( ) POUR k DE 1 à m FAIRE DEBUT LIRE Page de R1 FIN Fin A l g o r i t h m e MP :

76/210 Optimisation des requêtes Optimisation des requêtes Visualisation : Expression Algébrique Arbre algébrique Plan d exécution de la requête

77/210 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 Stockage des plans d exécution dans une table PLAN_TABLE dont le script de création (fourni par Oracle) se trouve dans $ORACLE_HOME/rdbms/admin/utlxplan.sql Etapes en vue de la consultation : création la table de nom PLAN_TABLE Eventuellement la détruire et la recréer exécuttion d une commande EXPLAIN PLAN sur une requête Stockage (description) du plan d exécution de cette dernière) dans la table PLAN_TABLE Interrogation de la table PLAN_TABLE

78/210 Plan d exécution Exécution d une commande EXPLAIN PLAN sur une requête EXPLAIN PLAN SET s t a t e m e n t i d= exemple1 // i d e n t i f i a n t FOR // exemple 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% ;

79/210 Plan d exécution Affichage du plan d exécution Interrogation de la table PLAN_TABLE SELECT LPAD(,2 (LEVEL 1 ) ) o p e r a t i o n o p t i o n s object name Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 1 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 1 ; Résultat affiché : Plan d exécution ----------------------------------------------- SELECT STATEMENT TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

80/210 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 : 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... Extensible des données quelconques

81/210 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

82/210 Plan d exécution Structures hiérarchiques, arborescentes Arbre Généalogique Oracle permet la représentation et la manipulation des données ayant une structure arborescente par le modèle relationnel par exemple c r e a t e t a b l e PERSONNES ( NUMERO number ( 7 ), NOM varchar ( 1 5 ), PRENOM varchar ( 1 5 ), DATENAISSANCE date, SEXE char ( 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), constraint FK PERSONNES PERE PERSONNES foreign key (PERE) r e f e r e n c e s PERSONNES, constraint FK PERSONNES MERE PERSONNES foreign 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 check (SEXE i n ( M, F ) ) ) ;

83/210 Optimisation des requêtes Optimisation des requêtes Requête simple sur une table non indexée DELETE p l a n t a b l e ; // ( l a t a b l e é t a n t c r é é e une f o i s, i l s u f f i t de l a v i d e r ) 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% ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 1 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 1 ; Plan d exécution ----------------------------------------------- SELECT STATEMENT TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

84/210 Optimisation des requêtes Optimisation des requêtes Requête simple sur une table indexée drop i n d e x i nom ; c r e a t e i n d e x i nom on e l e v e s (nom ) ; 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% ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 1 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 1 ; Plan d exécution ------------------------------------------------ SELECT STATEMENT TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

85/210 Optimisation des requêtes Optimisation des requêtes Comparaison Requête simple sur une table non indexée : Plan d exécution --------------------------------------------- SELECT STATEMENT TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM Requête simple sur une table indexée : Plan d exécution --------------------------------------------- SELECT STATEMENT TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

86/210 Optimisation des requêtes drop i n d e x i nom ; d e l e t e p l a n t a b l e ; Optimisation des requêtes Requête avec un order by sur une table non indexée 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 ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 2 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 2 ; Plan d exécution --------------------------------- SELECT STATEMENT SORT ORDER BY TABLE ACCESS FULL ELEVES

87/210 Optimisation des requêtes Optimisation des requêtes Requête avec un order by sur une table indexée drop i n d e x i nom ; c r e a t e i n d e x i nom on e l e v e s (nom ) ; d e l e t e p l a n t a b l e ; 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 ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 2 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 2 ; Plan d exécution ------------------------------------ SELECT STATEMENT SORT ORDER BY TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

88/210 Optimisation des requêtes Optimisation des requêtes Comparaison Requête avec un order by sur une table non indexée Plan d exécution ----------------------------------------------- SELECT STATEMENT SORT ORDER BY TABLE ACCESS FULL ELEVES Requête avec un order by sur une table indexée Plan d exécution --------------------------------------------- SELECT STATEMENT SORT ORDER BY TABLE ACCESS BY INDEX ROWID ELEVES INDEX RANGE SCAN I_NOM

89/210 Optimisation des requêtes Optimisation des requêtes Requête de jointure avec les deux tables indexées d e l e t e p l a n t a b l e ; EXPLAIN PLAN SET s t a t e m e n t i d = r e q u e t e 3 FOR s e l e c t nom, prenom, num cours, p o i n t s from e l e v e s e, r e s u l t a t s r where r. n u m e l e v e = e. n u m e l e v e ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 3 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 3 ; Plan d exécution ---------------------------------------------- SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL RESULTATS TABLE ACCESS BY INDEX ROWID ELEVES INDEX UNIQUE SCAN PK_ELEVES

90/210 Optimisation des requêtes Optimisation des requêtes Requête de jointure avec les deux tables indexées L ordre des 2 tables change d e l e t e p l a n t a b l e ; EXPLAIN PLAN SET s t a t e m e n t i d = r e q u e t e 3 FOR s e l e c t nom, prenom, num cours, p o i n t s from r e s u l t a t s r, e l e v e s e where r. n um e l e v e = e. n u m e l e v e ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 3 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 3 ; Plan d exécution ---------------------------------------------- SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL ELEVES TABLE ACCESS BY INDEX ROWID RESULTATS INDEX RANGE SCAN PK_RESULTATS

91/210 Optimisation des requêtes Optimisation des requêtes Comparaison Requête de jointure avec les deux tables indexées Plan d exécution ---------------------------------------------- SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL RESULTATS TABLE ACCESS BY INDEX ROWID ELEVES INDEX UNIQUE SCAN PK_ELEVES Requête de jointure avec les deux tables indexées (L ordre des 2 tables change) Plan d exécution ---------------------------------------------- SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL ELEVES TABLE ACCESS BY INDEX ROWID RESULTATS INDEX RANGE SCAN PK_RESULTATS

92/210 Optimisation des requêtes Optimisation des requêtes Requête de jointure avec les deux tables indexées et une sélection d e l e t e p l a n t a b l e ; EXPLAIN PLAN SET s t a t e m e n t i d = r e q u e t e 4 FOR s e l e c t nom, prenom, num cours, p o i n t s from e l e v e s e, r e s u l t a t s r where r. n u m e l e v e = e. n u m e l e v e and e. n u m e l e v e = 10 ; SELECT LPAD(, 2 ( LEVEL 1 ) ) o p e r a t i o n o p t i o n s o b j e c t n a m e Plan d e x é c u t i o n FROM p l a n t a b l e START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 4 CONNECT BY PRIOR i d = p a r e n t i d AND s t a t e m e n t i d = r e q u e t e 4 ;

93/210 Optimisation des requêtes Optimisation des requêtes Requête de jointure avec les deux tables indexées et une sélection 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

94/210 Outils d optimisation Partie 2 Introduction Présentation des outils des méthodes pour assurer le suivi de la base et garantir sa performance

95/210 Outils d optimisation Amélioration du Suivi et de la performance de la base 1 Choix de l optimiseur et collecte des statistiques 2 Suivi des indicateurs 3 Outils pour améliorer l optimisation de la base

96/210 Optimiseur Oracle Avant la version 7.0 : Historique de l optimiseur d Oracle Optimiseur Syntaxique optimiseur syntaxique (rule-based optimizer) avant la version 7/0 : Hypothèse de base : à partir du moment où une instruction SQL validait une règle, et que le numéro de la règle diminuait, le plan d exécution était réputé meilleur. Fonctionnement : uniquement optimisation du code en utilisant un ensemble de règles internes fixes et en les appliquant à partir d une analyse syntaxique du code

97/210 Optimiseur Oracle Historique de l optimiseur d Oracle Optimiseur Syntaxique Limites de l optimiseur syntaxique : incapacité à déterminer la méthode la moins coûteuse Pas usage de type de fonction de coût ou de statistiques Mais, initialement conçu pour les BDD transactionnelles (les Datawarehouses n existaient pas encore)

98/210 Optimiseur Oracle Historique de l optimiseur d Oracle Optimiseur Statistique Apparition avec la version 7.0 d Oracle Objectifs : Utilisation d un plus grand nombre d options lors de la construction des plans d exécution du code SQL Mais maturité difficile à atteindre : 7 ans! A partir de Oracle 7.3 : Possibilité de générer et d enregistrer des histogrammes de colonnes Histogrammes de colonnes : Fonctionnalité capable de déterminer la distribution effective des données pour une colonne particulière

99/210 Optimiseur Oracle Initialisation des Paramétrage de l Optimiseur Configuration de l instance Oracle à l aide du paramètre OPTIMIZER_MODE Valeur définie dans le fichier init.ora Valeur par défaut : CHOOSE (valeur nécessaire pour l optimisation statistique) Valeur RULE : optimisation syntaxique (rule-based optimizer) Optimisation du code en utilisant un ensemble de règles internes fixes telles que : Accès par l intermédiaire d un index composite avec toutes les clés contenues dans la clause where Accès par l intermédiaire d un index sur une colonne, etc. Autres valeurs possibles (selon les versions d oracle) : FIRST_ROWS, ALL_ROWS

100/210 Optimiseur Oracle Initialisation des Paramétrage de l Optimiseur Modification du paramètre au niveau session à l aide de la commande suivante : Alter s e s s i o n set o p t i m i z e r m o d e=f i r s t r o w s ;

101/210 Optimiseur Oracle Mode CHOOSE de l Optimiseur Obejectif de l optimiseur : tenter de tout exécuter en mémoire centrale et donc diminuer au maximum les E/S (hit Ratio) Utilisation des calculs statistiques du catalogue Oracle (dba_tables, dba_indexes, les vues V$, etc...) pour générer le plan d exécution des requêtes

102/210 Optimiseur Oracle Mode CHOOSE de l Optimiseur En mode CHOOSE, la présence de statistiques dans le dictionnaire détermine si l optimiseur statistique est utilisé 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, table name, 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 ;

103/210 Statistiques Collecte des statistiques Calcul des statistiques d objets : Utilisation de la commande ANALYZE pour : collecter ou supprimer des statistiques des tables (ou partition de table), d index (ou partition d index), cluster,... valider la structure des tables (ou partition de table), d index (ou partition d index), cluster,... identifier des lignes migrées ou chainées d une table d un cluster,...

104/210 Statistiques Collecte des statistiques d une table Analyse statistique d une partition (estimation sur la totalité de la partition) ANALYZE TABLE emp PARTITION ( p1 ) COMPUTE STATISTICS ; Analyse statistique et validation de la structure d une table ANALYZE TABLE emp VALIDATE STRUCTURE; Analyse statistique d une partie d une table (exemple 33 %) ANALYZE TABLE emp ESTIMATE STATISTICS SAMPLE 33 p e r c e n t ; Analyse statistique d une table ainsi que de ses indexes ANALYZE TABLE emp COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;

105/210 Statistiques Collecte des statistiques d une Index Analyse statistique et validation de la structure d un index ANALYZE INDEX p a r t s i n d e x VALIDATE STRUCTURE; Analyse statistique ( sur la totalité de l index) ANALYZE INDEX i n d x 1 COMPUTE STATISTICS ; Analyse statistique d une partie d un index (exemple 44 %) ANALYZE INDEX p a r t s i n d e x ESTIMATE STATISTICS SAMPLE 44 p e r

106/210 Statistiques Suppression des statistiques d une table et des index ANALYZE TABLE emp DELETE STATISTICS

107/210 Statistiques Quelle est la quantité optimale des statistiques nécessaire? Si estimation des statistiques des objets en se fondant sur un échantillon (estimate) : La taille de celui-ci doit être appropriée Élément essentiel pour fournir à l optimiseur des statistiques dotées d un bon intervalle de confiance Un niveau de 20% est souvent utilisé et semble approprié Si choix de calculer les statistiques (compute) : Niveau de confiance : 100% Et les statistiques doivent être parfaitement précises Nécessite des ressources et du temps pour réaliser ces calculs

108/210 Statistiques Quelle est la quantité optimale des statistiques nécessaire? S il s agit d Oracle 8i ou supérieur, le package DBMS_STATS pourra analyser les tables en parallèle Si exécution d une commande analyze estimate sur une taille d échantillon > 49% : le module calculera les statistiques sur l ensemble de la table

109/210 Statistiques Nouveaux packages pour la génération des statistiques DBMS_UTILITY.ANALYZE_SCHEMA : analyse des schémas Oracle DBMS_STATS : (nouveau package) statistique d objets d Oracle8i

110/210 Statistiques DBMS UTILITY.ANALYZE SCHEMA Analyse des schémas Oracle Exécution de la procédure analyze_schema du package DBMS_UTILITY Exemple : Execute d b m s u t i l i t y. a n a l y z e s c h e m a ( SCOTT, e s t i m a t e, e s t i m a t e p e r c e n t =>20) ;

111/210 Statistiques DBMS STATS Nouveau package de statistiques d objets d Oracle8i Exécution de calculs avec différentes options Procédure GATHER_INDEX_STATS GATHER_TABLE_STATS Description Rassemblement de statistiques sur les index Rassemblement de statistiques sur les index, colonnes et tables GATHER_SCHEMA_STATS Rassemblement de statistiques sur tous les objets d un schéma GATHER_DATABASE_STATS Rassemblement de statistiques sur tous les objets d une base de données

112/210 Statistiques DBMS STATS Exemple d utilisation d option : Procédure GATHER_TABLE_STATS DBMS STATS. GATHER TABLE STATS ( DEV, > Schéma C o n trat, > Table NULL, > P a r t i t i o n 30, > % de l é c h a n t i l l o n FALSE, > E c h a n t i l l o n de b l o c? FOR ALL COLUMNS, > Colonnes 4, > Degré de p a r a l l é l i s m e DEFAULT, > Table e t t o u t e s l e s p a r t i t i o n s TRUE) ; > Cascade v e r s l e s i n d e x

113/210 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

114/210 Statistiques DBMS STATS Syntaxe BEGIN END; DBMS STATS. g a t h e r t a b l e s t a t s ( DEV, CONTRAT, e s t i m a t e p e r c e n t => DBMS STATS. a u t o s a m p l e s i z e, CASCADE=>TRUE) ;

115/210 Statistiques Restauration des statistiques avec DBMS STATS Si les statistiques : semblent fausses entraine l Optimiseur à générer des mauvauc 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;

116/210 Statistiques Fréquence des statistiques A quelle fréquence les statistiques doivent être calculées? Cela dépend du taux du volume de changement des données dans la base

117/210 Suivi des Indicateurs 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

118/210 Suivi des Indicateurs Ratios de la base Buffer cache hit Rate nombre de fois qu un block utile à la requête existe dans le buffer cache il faut que ce pourcentage soit proche de 90% s e l e c t round ((1 ( pr. v a l u e /( bg. v a l u e+cg. v a l u e ) ) ) 1 0 0, 2 ) from v $ s y s s t a t pr, v $ s y s s t a t bg, v $ s y s s t a t cg where pr. name= p h y s i c a l r e a d s l e c t u r e s d i s q u e and bg. name= db b l o c k g e t s l e c t u r e s mémoire and cg. name= c o n s i s t e n t g e t s ; l e c t u r e s mémoire Objectif : avoir en mémoire l information dont on a besoin Amélioration de ce ratio : augmenter le db_block_buffers

119/210 Suivi des Indicateurs Ratio de la base Library cache get hit Rate Proportion des requêtes pour obtenir un verrou sur un objet Les requêtes sont satisfaite en trouvant le descripteur de l objet qui doit déjà être en mémoire ce pourcentage doit être proche de 90% s e l e c t round (sum( g e t h i t s )/sum( g e t s ) 100,2) from v $ l i b r a r y c a c h e ; Amélioration des performances : Augmentation des valeurs SHARED_POOL_SIZE, et OPEN_CORSORS dans init.ora

120/210 Suivi des Indicateurs Ratio de la base Dictionary Cache Hit Ratio Mesure du taux de requêtes pour obtenir des informations du dictionnaire de données, des tables et des vues contenant des informations sur la base de données les structures les utilisateurs

121/210 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

122/210 Suivi des Indicateurs Ratio de la base Exemple d utilisation s e l e c t sum( gets g e t m i s s e s ) 100/sum( g e t s ) from v$rowcache ; Cache du dictionnaire : stocké dans le Shared Pool (partie du SGA) Amélioration du ratio : augmentation de la taille du share pool (SHARED_POOL_SIZE dans init.ora) NB : A partir de la version 10g, la manipulation du catalogue est devenue plus intelligente

123/210 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 round ( (mem. value /(mem. value+dsk. value ) ) 1 0 0, 2 ) from v $ s y s s t a t mem, v $ s y s s t a t dsk where mem. name= s o r t s ( memory ) and dsk. name= s o r t s ( d i s k ) ;

124/210 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

125/210 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...

126/210 Alertes Les alertes Fichiers de trace Oracle_Sid_numero.trc Ces fichiers contiennent des informations : utile pour l optimisation de la base : traces générées par les utilitaires tkprof, statpack, utlbstat, etc. ou permettent au DBA, de suivre et de corriger des erreurs, afin d éviter le plantage, ou un mauvais fonctionnement de la base Oracle

127/210 Alertes Exemple de fichier d alerte F r i Sep 12 1 1 : 4 6 : 0 1 2003 S t a r t i n g ORACLE i n s t a n c e ( normal ) LICENSE MAX SESSION = 0 LICENSE SESSIONS WARNING = 0 LICENSE MAX USERS = 0 S t a r t i n g up ORACLE RDBMS V e r s i o n : 8. 1. 7. 0. 0. System p a r a m e t e r s w i t h non d e f a u l t values : p r o c e s s e s = 320 s e s s i o n s = 357 t i m e d s t a t i s t i c s = TRUE n l s t e r r i t o r y = FRANCE n l s d a t e f o r m a t = YYYY MM DD n l s n u m e r i c c h a r a c t e r s =., c o n t r o l f i l e s = ${ORACLE HOME}/ dbs / o r a d a t a 1 / DWH ctl 1. c t l, ${HOME}/dbdc / o r a c l e / dbs / o r a d a t a 8 / DWH ctl 2. c t l d b b l o c k b u f f e r s = 65536 d b b l o c k s i z e = 16384 ORA 1652: unable to extend temp segment by 64 i n tablespace S TBS INDX Wed Dec 3 1 2 : 2 5 : 4 9 2003 ORA 1652: unable to extend temp segment by 6400 i n tablespace S TBS DATA Wed Dec 3 1 2 : 2 8 : 5 1 2003 ALTER TABLESPACE S TBS DATA ADD DATAFILE c :\ o r a c l e \ o r a n t \ o r a d a t \dbs\tbs DWH DATA 1. dbf SIZE 512M AUTOEXTEND OFF Wed Dec 3 1 2 : 2 8 : 5 9 2003

128/210 Catalogue Oracle Catalogue Oracle:Instance et base de données V$database : description de la base V$instance : description de l instance V$parameter : paramètres de la base V$process~: nombre de process actifs V$waitstat~: statistiques relatives aux attentes V$system_event : attentes totales pour des évènements particuliers

129/210 Catalogue Oracle Parametres de la base : v$parameter S e l e c t Name, Type, Value, d e s c r i p t i o n from v $ p a r a m e t e r NAME TYPE VALUE DESCRIPTION t i m e d s t a t i s t i c s 1 TRUE m a i n t a i n i n t e r n a l t i m i n g s t a t i s t i c s t r a c e e n a b l e d 1 TRUE e n a b l e KST t r a c i n g s q l t r a c e 1 FALSE e n a b l e SQL t r a c e db name 2 dwh d a t a b a s e name s p e c i f i e d i n CREATE DATABASE u t l f i l e d i r 2 u t l f i l e a c c e s s i b l e d i r e c t o r i e s l i s t instance name 2 BCR D instance name supported by the instance d b b l o c k s i z e 3 16384 S i z e o f d a t a b a s e b l o c k i n b y t e s open cursors 3 500 max # c u r s o r s per s e s s i o n s o r t a r e a r e t a i n e d s i z e 3 6000000 s i z e o f in memory s o r t work a r e a r e t a i n e d between f e t c h ca d b f i l e m u l t i b l o c k r e a d c o u n t 3 4 db b l o c k to be read each IO max enabled roles 3 148 max number of r o l e s a user can have e n a b l e d m a x r o l l b a c k s e g m e n t s 3 78 max. number o f r o l l b a c k segments in SGA cache s g a m a x s i z e 6 1178569392 max t o t a l SGA s i z e s h a r e d p o o l r e s e r v e d s i z e 6 26843545 s i z e i n b y t e s o f r e s e r v e d a r e a o f s h a r e d p o o l l a r g e p o o l s i z e 6 0 s i z e i n b y t e s o f t h e l a r g e a l l o c a t i o n p o o l j a v a p o o l s i z e 6 33554432 s i z e i n b y t e s o f t h e Java p o o l

130/210 Catalogue Oracle Statistiques relatives aux attentes S e l e c t CLASS, COUNT, TIME from v$waitstat ; CLASS COUNT TIME data b l o c k 19866 26102 s o r t b l o c k 0 0 s a v e undo b l o c k 0 0 segment h e a d e r 5301 4161 s a v e undo h e a d e r 0 0 f r e e l i s t 0 0 e x t e n t map 0 0 1 s t l e v e l bmb 0 0 2nd l e v e l bmb 0 0 3 rd l e v e l bmb 0 0 bitmap b l o c k 0 0 bitmap i n d e x b l o c k 0 0 f i l e h e a d e r b l o c k 0 0 unused 0 0 system undo h e a d e r 0 0 system undo b l o c k 0 0 undo h e a d e r 1933 397 undo b l o c k 44 3

131/210 Catalogue Oracle attentes totales pour des évènements particuliers 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 ; EVENT TOTAL WAIT AVERAGE WAIT l a t c h f r e e 3740 1 pmon t i m e r 1929737 293 enqueue 10937 103 c o n t r o l f i l e s e q u e n t i a l read 596427 0 c o n t r o l f i l e p a r a l l e l w r i t e 1870221 3 b u f f e r busy w a i t s 27144 1 l o g f i l e s e q u e n t i a l read 1571 0 l o g f i l e s i n g l e w r i t e 1562 1 l o g f i l e p a r a l l e l w r i t e 443272 0 LGWR wait f o r redo copy 12490 0 db f i l e s e q u e n t i a l read 173476 0 db f i l e s c a t t e r e d read 1010050 0 db f i l e s i n g l e w r i t e 104 1 db f i l e p a r a l l e l w r i t e 37096 3 db f i l e p a r a l l e l read 1 6 l i b r a r y cache p i n 139 285 l i b r a r y cache l o c k 149 11 l i b r a r y cache l o a d l o c k 3 0

132/210 Catalogue Oracle Catalogue d Oracle : Disques V$datafile : liste des fichiers des données V$filestat : statistiques relatives aux I/O dans les fichiers de données V$tempstat : informations sur les statistiques relatives aux opérations des I/O pour les fichiers de données des TBS temporaires V$segment_statistics : statistiques sur les I/O par segments

133/210 Catalogue Oracle Catalogue d Oracle : Contention V$lock : verrou externe V$latch : verrou interne d Oracle V$rollstat : statistiques sur les segments d annulation V$process : nombre de process actifs V$waitstat : statistiques sur les contention des blocks

134/210 Catalogue Oracle Catalogue d Oracle : Mémoire V$buffer_pool_statistics : statistiques sur buffer pool V$db_object_cache : objets de la base, dans le cache V$rowcache : échec et succès dans le dictionnaire V$sysstat : statistique sur l instance d Oracle V$librarycache : statistiques sur le librarycache

135/210 Catalogue Oracle Catalogue d Oracle : Session V$session : liste des sessions V$sesstat : statistiques des sessions V$session_event : informations sur les attentes d une session V$session_wait : attentes des sessions actives V$waitstat : statistiques relatives aux attentes V$open_cursor : liste des curseurs ouverts

136/210 Optimisation des applications Recettes Comment améliorer le temps de réponse des applications? 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

137/210 Optimisation des applications Recettes Création d une table partitionnée sous Oracle Create t a b l e f a c t u r e ( num fact 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 range ( d a t e v e n t e ) ( p a r t i t i o n p 200312 value 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 value 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 value l e s s than ( t o d a t e ( 2005 01 01, YYYY MM DD ) ) )

138/210 Optimisation des applications Recettes Exécution parallèle de la création d index sous Oracle Create index i d x t l c n t 1 on t l c n t ( n 0 c n t ) T a b l e s p a c e t b s i n d e x S t o r a g e ( i n i t i a l 10M next 5M) p a r a l l e l e 3 Nologging Local ;

139/210 Optimisation des applications Recettes Tuning des Entrées/sorties Desc V$filestat file# phyrds phywrts phyblkrd phblkwrt readtim writetim : numéro du fichier : lecture disque : écriture disque : nbre de block disque lus : nombre de block disque écrits : temps de lecture : temps d écriture

140/210 Optimisation des applications Recettes Tuning des Entrées/sorties Pour les fichiers dont la colonne phyrds est importante : vérifier si les tables sont accédées en full scan S e l e c t name, value from V$SYSSTAT Where name l i k e %t a b l e scan ( l o n g% Si la valeur value est importante : vérifier les applications... Définir les bons index

141/210 Optimisation des applications Recettes Détection des lignes chaînées ou migrées Détection de l état de chaînage d une table Analyze table scott. EMP compute statistics Select num rows, c h a i n c n t from d b a t a b l e s where table name = EMP ; Augmenter la valeur de pctfree de la table EMP

142/210 Optimisation des applications Recettes Détection des lignes chaînées ou migrées Etat de chaînage au niveau de la base Détection de l état de chaînage au niveau de la base : s e l e c t from v $ s y s s t a t where s t a t i s t i c = Table Fetch Continued Row ;

143/210 Optimisation des applications Recettes Détection des Index inutilisés Alter index nom index monitoring usage; Select index name, used From v $ i n d e x u s a g e where index name = NOM INDEX ; Alter index nom index nomonitoring usage;

144/210 Optimisation des applications Recettes Stratégies d indexation Quand faut-il utiliser les index? Construction d index optimaux Quelques options d indexation : Non-unique index (index avec doublons) Unique index (index sans doublons) Bitmap index Hash partitionned index Composite partitioned index Reverse-key index Function-based index Descending index etc.

145/210 Optimisation des applications Recettes Stratégies d indexation Index de fonction : Create index 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 index 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 Quand faut-il reconstruire les index?

146/210 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 ) ; Équivalent de ANALYZE INDEX VALIDATE STRUCTURE Desc Index_stats lf_rows lf_rows_len Del_lf_rows del_lf_rows_len : Nombre de valeurs présentes dans index : Longueur de l index (en octets) : Nombre de valeur supprimées : Longueur d index supprimées (en octets)

147/210 Optimisation des applications Recettes Réorganiser/Reconstruire un index? Quand 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 ; si moyen_del > 20% alors reconstruire index a l t e r index s c o t t. i n d e x 1 r e b u i l d ;

148/210 Optimisation des applications Recettes Hint : Utilisation des hints indication placée dans une requête pour orienter le plan d exécution ressemble beaucoup à un commentaire, à l exception du + après le /* Exemple : SELECT / + LE HINT / c o l o n n e ( s ) FROM t a b l e ( s ) WHERE... ; 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!

149/210 Optimisation des applications Recettes Exemple/syntaxe générique : Utilisation des hints SELECT / + LE HINT / c o l o n n e ( s ) FROM t a b l e ( s ) WHERE... Instantiation de LE_HINT : FULL(table) : Parcours de toute la table (sans utiliser l index) INDEX(table, index) : Force l utilisation de l index de la table NO_INDEX(table, index) : Désactivation de l index de la table ORDERED : Force l ordre de jointure des tables, telles qu elles apparaissent dans la clause From FIRST_ROWS : Force Oracle à choisir le plan d exécution qui retourne les n premières lignes de manière la plus efficace PARALLEL(table, n) : Spécification des n serveurs concurrent pouvant être utilisés pour une requête etc. : (voir : http://download-west.oracle.com/docs/cd/b10501_01/server.920/a96533/hintsref.htm)

150/210 Optimisation des applications Recettes Utilisation des hints Outils d aide : PRECISE : suivi d une base de production TOAD : suivi du passage du prototypage à la production OEM : Oracle Entreprise Manager etc.

151/210 Optimisation des applications Recettes Utilisation des hints Utilisation ORDERED : impose à l optimiseur d utiliser les tables dans l ordre d apparition dans la requête SQL S e l e c t / + ORDERED / d. departement name, e. surname from employees e, departement d where d. d e p a r t e m e n t i d=e. d e p a r t e m e n t i d and d. departement name = : 1 ;

152/210 Optimisation des applications Recettes Utilisation des hints Utilisation INDEX : impose à l optimiseur d utiliser les indexes spécifiés par le Hint INDEX S e l e c t / + INDEX( e, e m p l o y e i d x ) / nom from employees e where e. d e p a r t e m e n t i d = : 1 and e. manager id = : 2 ; ALTER SESSION SET o p t i m i z e r g o a l= r u l e f i r s t r o w s a l l r o w s choose ;

153/210 Optimisation des applications Recettes Différents types de hints Optimisation : FIRST_ROWS, ALL_ROWS : Force Oracle à utiliser les premièers ou toutes les lignes ORDERED : Accès aux tables dans l ordrede de la clause FROM Accès: FULL(tab), ROWID, PARALLEL

154/210 Optimisation des applications Recettes Impact des Hints Exemple SQL> EXPLAIN PLAN 2 SET s t a t e m e n t i d = r e q u e t e 4 3 FOR s e l e c t nom, prenom, num cours, p o i n t s from e l e v e s e, r e s u l t a t s r 4 where r. num eleve = e. num eleve and e. num eleve = 10 ; SQL> SELECT LPAD(,2 (LEVEL 1)) o p e r a t i o n o p t i o n s object name Plan d exécution 2 FROM p l a n t a b l e 3 START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 4 4 CONNECT BY PRIOR id = p a r e n t i d AND statement id = requete4 ; Plan 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 ).

155/210 Optimisation des applications Recettes Impact des Hints Exemple SQL> EXPLAIN PLAN 2 SET s t a t e m e n t i d = r e q u e t e 4 3 FOR s e l e c t / + FULL( e l e v e s ) FULL( r e s u l t a t s ) / nom, prenom, num cours, p o i n t s from e l e v e s e, r e s u l t a t s r 4 where r. num eleve = e. num eleve and e. num eleve = 10 ; E x p l i c i t é. SQL> SELECT LPAD(,2 (LEVEL 1)) o p e r a t i o n o p t i o n s object name Plan d exécution 2 FROM p l a n t a b l e 3 START WITH i d = 0 AND s t a t e m e n t i d = r e q u e t e 4 4 CONNECT BY PRIOR id = p a r e n t i d AND statement id = requete4 ; Plan 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 ).

156/210 Optimisation des applications Recettes Impact des Hints Exemple Sans le Hint : Plan 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 Avec le Hint : FULL(eleves) et FULL(resultat) Plan 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

157/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Premier exemple Eviter l utilisation des index dans les clauses where Consultation par les instructions SQL d un plus grand nombre de blocs de données en utilisant l index plutôt qu en exécutant un balayage complet de la table Amélioration : ajout d une expression anodine à la colonne d index Par exemple : ajout de +0 à une colonne numérique concaténation d une chaîne vide à une colonne alphanumérique positionnement du hint : / + FULL s i vous u t i l i s e z l o p t i m i s e u r s t a t i s t i q u e. S e l e c t / + FULL(EMP) PARALLEL(EMP, 2) / from EMP Where......

158/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Deuxième exemple Eviter de mélanger ou de comparer des valeurs et des types de données de colonnes l optimiseur ignorera l index Améliorations : Si le type de colonne est NUMBER : ne pas utiliser de guillemets pour encadrer la valeur Ne pas oublier d encadrer une valeur avec ses guillemets lorsqu elle est définie comme de type alphanumérique S e l e c t... from EMP where SALARY > 1000 ; Mauvais S e l e c t... from EMP where SALARY > 1000 ; Bon S e l e c t... from EMP where MANAGER = SMITH ; Mauvais S e l e c t... from EMP where MANAGER = SMITH ; Bon

159/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Troisième exemple : Ne pas utiliser l opérateur IS NULL dans une colonne indexée l optimiseur ignorera l index SELECT N emp, name, adr from EMP name i s n u l l ; Quatrième exemple : En cas d utilisation de curseurs ou du SQL dynamique : ne pas coder pas ls instruction avec des valeurs en dur Empêche la réutilisation du code SQL dans le pool partagé Utiliser des variables liées : S e l e c t... from EMP where EMPNO = 2324 ; Mauvais S e l e c t... from EMP where EMPNO = : 1 ; Bon EXECUTE IMMEDIATE Delete from EMP where EMPNO = 2324 ; Mauvais EXECUTE IMMEDIATE Delete from EMP where EMPNO = : 1 USING v a r i a b l e ; Bon

160/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Amélioration de l utilisation des bind variables à partir de Oracle 8i Insertion du paramètre CURSOR_SHARING=force dans le fichier init.ora NB : Possibilité de définir le paramètre au niveau session Mais possibilité d augmentation des délais d analyse Il peut être préférable de réécrire le code

161/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Pas d instruction Insert, update ou delete dans une itération (une boucle PL/SQL) si les opérations peuvent être réalisées en vrac (bulk) Declare C u r s o r... s e l e c t from X Begin For C u r s o r i n... Loop I n s e r t i n t o Z v a l u e s ( C u r s o r. col1, C u r s o r. c o l 2 1. 5,... ) ; Commit ; End l o o p ; End ; Mauvais Begin I n s e r t i n t o Z s e l e c t col1, c o l 2 1. 5 from X where ; Commit ; End ; Bon

162/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Evitez l utilisation des sous-requêtes Impact négatif sur les performances de votre système en consommant beaucoup de ressources CPU Solution : utilisation des vues en ligne (inline views), c est-à-dire des sous-requêtes dans la clause from de l instruction select, disponible depuis la version 7.3 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 t i d = e. d e p t i d ) ; Mauvais 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

163/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Evitez les produit cartesien Ne pas construire la clause from d une instruction select avec des tables qui n apparaissent pas dans les conditions de jointure de la clause where afin d éviter de réaliser un produit cartésien Regrouper la création des tables et l insert Si la table est créée et alimentée, regrouper l opération : Create 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 )... ) ; I n s e r t i n t o X s e l e c t c o l 1, c o l 2 from Y... ; Mauvais Create 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 c o l 1, c o l 2 from Y... ; Bon

164/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Eviter l utilisation de select x from dual Bien qu elle semble innocente, elle peut consommer l essentiel des performances de votre système For i i n 1.. 1 0 0 0 0 l o o p S e l e c t SEQ.NEXTVAL i n t o m a v a r i a b l e from d u a l ; I n s e r t i n t o X v a l u e s ( m a v a r i a b l e,... ) ; End l o o p ; Mauvais 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

165/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Eviter l utilisation de NOT IN Privilègier l utilisation de NOT EXISTS plutôt que NOT IN dans les clauses where, voir l utilisation d une jointure externe avec not in (lent) S e l e c t a. nom, a. prenom From S a l a r i e a Where a. nom not i n ( s e l e c t nom from F o n c t i o n where j o b = INFORMATICEN ) ; avec jointure externe (plus rapide) S e l e c t a. nom, a. prenom From S a l a r i e a, F o n c t i o n b Where a. nom = b. nom(+) and b. nom i s NULL And b. j o b = INFORMATICIEN ;

166/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Utiliser l opérateur LIKE avec un caractère initial plutôt que la fonction SUBSTR() Dans le cas de requêtes très complexes contenant de nombreuses conditions OR Envisager leur réécriture à l aide de UNION ALL Possibilité de découpage de la requête en modules bien dimensionnés qui pourront être optimisés plus facilement Rappel : Opérateur UNION : récupération de l ensemble des enregistrements retournés par les deux requêtes Les doublons ne sont pas pris en compte Opérateur UNION ALL : récupération de tous les enregistrements y compris les doublons (contrairement à l opérateur UNION)

167/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Utiliser les index appropriés, les plus sélectifs La sélectivité des données est le ratio entre le nombre de clés uniques et le nombre de lignes Plus elle approche 1.00, meilleur est l index Créer des index sur les colonnes de clés étrangères Utiliser des index composites Ceux-ci doivent être classés dans l ordre décroissant de sélectivité.

168/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Utiliser des index bitmaps lorsque la clause where contient des colonnes à faible cardinalité ou des opérations logiques comme OR, AND ou NOT exécutées sur ces colonnes renvoit un grand nombre de lignes de la table (sauf pour les tables supportant un grand nombre d opérations DML simultanées, du fait de leur comportement intrinsèquement bloquant)

169/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Utiliser des single-table hashs ou des index clusters Ces méthodes fournissent des performances excellentes sur les tables relativement statiques mais interrogées sur une large plage de valeurs Sachant qu un cluster enregistre les données dans un bloc de manière ordonnée, un balayage de plages utilisant un index sur ce cluster réalisera un plus petit nombre d opérations d entrées-sorties pour répondre à la requête

170/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire Choisir de manière active le type de jointure : nested loop, merge join ou hash join Lors de la jointure de trois tables ou plus, essayez de structurer la requête pour réaliser l élimination la plus forte sur la première jointure incorporer toutes les conditions sur une table dans la clause where. Privilégier le traitement en vrac (BULK COLLECT / FORALL)

171/210 Optimisation des applications Recettes Les codes SQL à ne pas écrire A partir d Oracle 8i, remplacer DBMS_SQL par la nouvelle fonctionnalité execute immediate (fonctionne nettement mieux) Execute immediate CREATE TABLE XX AS SELECT FROM YY ; En cas d utilisation de l optimiseur syntaxique (ce qui ne devrait plus durer) Structurer les clauses from de manière à ce que la table la plus petite soit la dernière définie dans la liste des tables S il est nécessaire d accélérer la création d un index Augmenter la valeur du paramètre SORT_AREA_SIZE au niveau session l essentiel des tris seront exécutés en mémoire

172/210 Optimisation des applications Recettes Vos requêtes SQL en mode trace Les étapes du processus d optimisation Activation d une session en mode trace

173/210 Optimisation des applications Recettes Les étapes du processus d optimisation 1 Vérifier que le paramètre TIMED_STATISTICS est positionné à TRUE au niveau instance 2 Vérifier que la valeur du paramètre MAX_DUMP_FILE_SIZE est suffisante Ce paramètre détermine la taille maximale du fichier de trace 3 Déterminer l emplacement pointé par le paramètre USER_DUMP_DEST USER_DUMP_DEST : indication de l emplacement où les fichiers de trace seront enregistrés 4 Activer le paramètre SQL_TRACE pour la session concernée 5 Exécuter l application 6 Exécuter tkprof sur les fichiers de trace 7 Etudier le fichier de sortie de tkprof 8 Ajuster les instructions SQL les plus coûteuses 9 Répéter les étapes 4 à 8 jusqu à ce que l objectif de performance soit atteint

174/210 Optimisation des applications Recettes Les étapes du processus d optimisation Remarque : Ne pas positionner pas le paramètre SQL_TRACE à TRUE dans le fichier init.ora : Toutes les instructions SQL exécutées seraient enregistrées, aboutissant à un ralentissement sensible du système, ainsi qu à la saturation du système de fichiers

175/210 Optimisation des applications Recettes Activation d une session en mode trace Exécution de la commande suivante : a l t e r s e s s i o n set t i m e d s t a t i s t i c s = true ; a l t e r s e s s i o n set s q l t r a c e = true ;... e x e c u t i o n de vos t r a i t e m e n t s...... a l t e r s e s s i o n set t i m e d s t a t i s t i c s = f a l s e ; a l t e r s e s s i o n set s q l t r a c e = f a l s e ; Remarques : (à partir de la version 7.2) il est possible de désactiver la trace à partir d une autre session Ne pas désactiver la trace en annulant la session (kill) Peut provoquer la troncature du fichier de trace et/ou introduire des informations erronées dans ce fichier

176/210 Optimisation des applications Recettes TKPROF Mettre la base ou la session en mode Trace : Base : mettre SQL_TRACE=TRUE dans init.ora Session : a l t e r s e s s i o n set SQL TRACE TRUE set a u t o t r a c e on Utilisation de TKPROF : pour analyser le fichier trace Syntaxe : TKPROF fichier_entree.trc fichier_sortie [Explain=username/password] [sys=no] [insert=filename] [print=entier]

177/210 Optimisation des applications Recettes Exemple de TKPROF SELECT NVL(TO_CHAR(CG, YYYYMMDD ), ) C01 C02 C03 C04 C05 C06 C07 FROM D21V2_ENGSEC WHERE CB = :0000 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 24562 2.64 2.66 0 0 0 0 Execute 24562 1.44 1.23 0 0 0 0 Fetch 24562 0.49 0.33 0 24562 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 73686 4.57 4.22 0 24562 0 0 Misses in library cache during parse: 0 Optimizer goal: RULE Parsing user id: 34 Rows Row Source Operation ------- --------------------------------------------------- 0 TABLE ACCESS BY INDEX ROWID D21V2_ENGSEC 1 INDEX UNIQUE SCAN (object id 103435)

178/210 Optimisation des applications Recettes Interprétation du résultat de TKPROF Call : La phase du traitement de l instruction SQL ( les phases define et bind sont incluses dans la phase parse Count : Le nombre d appels et d exécutions d une phase CPU : Le temps CPU (en secondes) consommé pour l exécution d une phase Elapsed : Le temps CPU (en secondes) écoulé, cumulé avec l ensemble des temps utilisés par le SE pour réaliser les changements de contexte traiter les interruptions répondre aux signaux exécuter les entrées-sorties attendre les ressources etc.

179/210 Optimisation des applications Recettes Interprétation du résultat de TKPROF Disk : Le nombre de blocs Oracle lus sur le disque pour une phase donnée Query : Le nombre de blocs Oracle lus en mémoire en mode cohérent (consistent mode) Current : Le nombre de blocs Oracle lus en mémoire en mode courant Rows Le nombre de lignes traitées dans chaque phase, avec les valeurs pour les instructions select dans la phase fetch, et pour les opération insert, update dans la phase execute

180/210 Optimisation des applications Recettes Utilitaires et Outils d optimisation Résumé 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)

181/210 Utilitaires d audit Interface TOAD

182/210 Utilitaires d audit Utilisation de TOAD Administration de plusieurs Bases Génération des scripts (Création TBS, Table,IDX,..) Consultation et MAJ des Données Comparaison des Objets des objects de deux schémas etc.

183/210 Utilitaires d audit Interface Oracle Entreprise Manager (OEM)

184/210 Utilitaires d audit Utilisation d OEM Administration de plusieurs bases Génération des sripts Consultation et mise à jour des données Comparaison des Objets objects de deux schémas etc.

185/210 Utilitaires d audit TKPROF Mettre la base ou la session en mode Trace : Base : mettre SQL_TRACE=TRUE dans init.ora Session : alter session set SQL_TRACE TRUE : set autotrace on Utilisation de TKPROF : pour analyser le fichier trace Syntaxe TKPROF fichier_entree.trc fichier_sortie [ [Explain=username/password] [sys=no] [insert=filename] [print=entier]

186/210 Utilitaires d audit Utlbstat et Utlestat Utlbstat : permet le collecte des statistiques par l alimentation des vues de la base Utlestat : permet l édition d un état de l activité de la base en s appuyant sur les données statistique collectées par Utlbstat.sql (anciens outils d oracle) Ils s exécutent à partir de SQL*PLUS connecté en tant que SYSDBA I n i t. ora ( TIMED STATISTICS=TRUE)

Utilitaires d audit 187/210 Utlbstat et Utlestat : Report.txt Statistic Total Per Transact Per Logon Per Second --------------------------- ---------- ------------ --------- ---------- SQL*Net roundtrips to/from 15 15 15.71 background timeouts 21 21 21 1 bytes received via SQL*Net 916 916 916 43.62 bytes sent via SQL*Net to c 601 601 601 28.62 calls to get snapshot scn: 6 6 6.29 calls to kcmgas 1 1 1.05 calls to kcmgrs 16 16 16.76 commit cleanouts 10 10 10.48 commit cleanouts successful 10 10 10.48 consistent gets 4 4 4.19 cursor authentications 4 4 4.19 db block changes 26 26 26 1.24 db block gets 27 27 27 1.29 enqueue releases 15 15 15.71 enqueue requests 9 9 9.43 execute count 6 6 6.29 free buffer requested 4 4 4.19 logons cumulative 1 1 1.05 messages received 1 1 1.05 messages sent 1 1 1.05 opened cursors cumulative 2 2 2.1

188/210 Utilitaires d audit Statpack Installation (nouvel outil d oracle, remplace Utlbstat, Utlestat) Exécution du script spcreate.sql Collecte des statistiques manuelle : statspack.snap automatique : spauto.sql édition d un report entre deux snapshots spreport.sql Compte-rendu de Statpack Cinq premiers évènements Wait Liste complète des évènements Wait Informations sur les instructions SQL E/S des TBS et des fichiers Statistiques sur l activité de l instance

189/210 Utilitaires d audit Exemple de Scripts du DBA pour le suivi de la base (1) Analyze.sql : Analyse statistique d un schéma. TablesChainees.sql : Affiche les tables ayant des enregistrements chaînés. Freetbs.sql : Espace libre pour chaque tablespace. Invalid.sql : Liste des objets invalides. NbreExtents.sql : Objets dépassant un certain nombre d extensions. RbsStatus.sql : Statut des rollbacks. Space.sql : Espace libre pour chaque tablespace. ObjectNotExtent.sql : Objets ne pouvant plus s étendre. TbsCoalesce.sql : Liste de tous les tablespaces de la base avec pour chacun, son pourcentage de fragmentation.

190/210 Utilitaires d audit Exemple de Scripts du DBA pour le suivi de la base (2) TbsOffline.sql : Listes des tablespaces non actifs. IndexUusuable.sql : Listes des index UNUSUABLE. FragTable.sql : Etat de la fragmentation des tables. UnusColTab : Tale eayant des colonnes UNUSED.

191/210 Utilitaires d audit Affichage de la liste des tables chaînées :TablesChainees.sql REM REM P r o c e d u r e : T a b l e s C h a i n e e s. s q l REM REM F o n c t i o n : A f f i c h e l e s t a b l e s ayant des e n r e g i s t r e m e n t s c h a i REM c o l owner format a10 c o l t a b l e n a m e format a30 s p o o l c h a i n e d r o w s. l o g s e l e c t OWNER, TABLE NAME, CHAIN CNT, round ( ( CHAIN CNT/NUM ROWS) 1 0 0, 2 ) from DBA TABLES where n v l (CHAIN CNT, 0 ) > 0 o r d e r by CHAIN CNT desc ; % CHAIN s p o o l o f f

192/210 Utilitaires d audit Affichage des espaces libres des différents Tablespace de la base REM ========================================================== REM P r o c e d u r e.......... : FeeTbs. s q l REM F o n c t i o n........... : Espace l i b r e pour chaque t a b l e s p a c e REM s p o o l f r e e t b s. l o g s e l e c t TABLESPACE NAME, sum (BLOCKS) as f r e e b l k, t r u n c ( sum (BYTES) / ( 1 0 2 4 1 0 2 4 ) ) as f r e e m, max( b y t e s ) / ( 1 0 2 4 ) as b i g c h u n k k, count ( ) as num chunks from DBA FREE SPACE group by TABLESPACE NAME o r d e r by f r e e m / s p o o l o f f

193/210 Utilitaires d audit Affichage des objets ne pouvant plus s étendre (1) REM ======================================================= REM P r o c e d u r e.......... : O b j e c t N o t E x t e n t. s q l REM F o n c t i o n........... : O b j e t s ne pouvant p l u s s e t e n d r e s p o o l o b j e c t e x t e n t. l o g s e t l i n e s i z e 130 s e t t r i m s on COLUMN T a b l e s p a c e Format A30 COLUMN SegmentType Format A12 COLUMN Owner Format A12 COLUMN Segment Format A30 COLUMN R e q u i r e d E x t e n t (KB) Format 9 9 9, 9 9 9, 9 9 9. 9 9 COLUMN MaxAvail (KB) Format 9 9 9, 9 9 9, 9 9 9. 9 9

194/210 Utilitaires d audit Affichage des objets ne pouvant plus s étendre (2) SELECT / + RULE / SEG. TABLESPACE NAME T a b l e s p a c e, SEG. SEGMENT TYPE SegmentType, EXT.OWNER, EXT.SEGMENT NAME Segment, decode (FREESPACE. EXTENT MANAGEMENT, DICTIONARY, SEG. NEXT EXTENT, LOCAL, decode (FREESPACE. ALLOCATION TYPE, UNIFORM, FREESPACE. INITIAL EXTENT, SYSTEM, EXT. BYTES ) ) / 1024 AS R e q u i r e d E x t e n t (KB), FREESPACE. LARGEST / 1024 MaxAvail (KB) FROM DBA EXTENTS EXT, DBA SEGMENTS SEG,

195/210 Utilitaires d audit ( s e l e c t / + RULE / MAXSIZE PERFILE. TABLESPACE NAME, TBS. EXTENT MANAGEMENT, TBS. ALLOCATION TYPE, TBS. INITIAL EXTENT, TBS. NEXT EXTENT, max( MAXSIZE PERFILE. MAXSIZEBYTES) AS LARGEST FROM ( s e l e c t / + RULE / DDF. TABLESPACE NAME, DDF. FILE ID, decode (AUTOEXTENSIBLE, YES, (DDF.MAXBYTES DDF. BYTES), 0 ) + n v l (max(dfs. BYTES), 0 ) AS MAXSIZEBYTES, NVL (MAX ( d f s. BYTES), 0 ) AS MAXFREEEXTENTSIZEBYTES

196/210 Utilitaires d audit Affichage des objets ne pouvant plus s étendre (4) from DBA FREE SPACE DFS, DBA DATA FILES DDF, DBA TABLESPACES TBSP where DFS. FILE ID (+) = DDF. FILE ID and TBSP. TABLESPACE NAME = DDF. TABLESPACE NAME and TBSP. CONTENTS = PERMANENT and TBSP. s t a t u s = ONLINE group by DDF. TABLESPACE NAME, DDF. FILE ID, decode (AUTOEXTENSIBLE, YES, (DDF.MAXBYTES DDF. BYTES), 0 ) ) MAXSIZE PERFILE, DBA TABLESPACES TBS

197/210 Utilitaires d audit Affichage des objets ne pouvant plus s étendre (5) WHERE MAXSIZE PERFILE. TABLESPACE NAME = TBS. TABLESPACE NAME AND TBS. STATUS = ONLINE group by MAXSIZE PERFILE. TABLESPACE NAME, TBS. EXTENT MANAGEMENT, TBS. ALLOCATION TYPE, TBS. INITIAL EXTENT, TBS. NEXT EXTENT) FREESPACE where SEG.OWNER = EXT.OWNER and SEG. SEGMENT TYPE = EXT. SEGMENT TYPE and SEG. SEGMENT NAME = EXT. SEGMENT NAME and SEG. TABLESPACE NAME = EXT. TABLESPACE NAME and (SEG. EXTENTS 1) = EXT. EXTENT ID and SEG. TABLESPACE NAME = FREESPACE. TABLESPACE NAME and decode (FREESPACE. EXTENT MANAGEMENT, DICTIONARY, SEG. NEXT EXTENT, LOCAL, decode (FREESPACE. ALLOCATION TYPE, UNIFORM, ) ) >= FREESPACE. LARGEST FREESPACE. INITIAL EXTENT, SYSTEM, EXT. BYTES

198/210 Utilitaires d audit Affichage des objets ne pouvant plus s étendre (5) o r d e r / s p o o l by SEG. TABLESPACE NAME, SEG. SEGMENT TYPE, SEG.SEGMENT NAME o f f

199/210 Utilitaires d audit Affichage des objets dont nombre extents > à une constante (1) REM =========================================================== REM P r o c e d u r e : N b r e E e x t e n t s. s q l REM F o n c t i o n : O b j e t s d e p a s s a n t un c e r t a i n nombre d e x t e n s i o n s REM Parametres......... : &1 : Nombre d e x t e n s i o n s REM =========================================================== c o l OWNER format a8 c o l SEGMENT TYPE format a18 c o l SEGMENT NAME format a25 s p o o l n r e x t e n t s. l o g s e l e c t S.OWNER, S. SEGMENT TYPE, S.SEGMENT NAME, EXTENTS, t o c h a r ( S. BYTES/(1024 1024), 9 9 9, 9 9 9. 9 0 ) as MB

200/210 Utilitaires d audit Affichage des objets dont nombre extents > à une constante (2) FROM DBA SEGMENTS s where EXTENTS > &1 o r d e r by EXTENTS desc / s p o o l o f f

201/210 Utilitaires d audit Affichage des objets invalides (1) REM =========================================================== REM P r o c e d u r e : I n v a l i d. s q l REM F o n c t i o n : O b j e t s d e p a s s a n t un c e r t a i n nombre d e x t e n s i o n s REM =========================================================== c o l owner format a10 c o l o b j e c t t y p e format a20 c o l o b j e c t n a m e format a30 s p o o l prompt i n v a l i d. l o g OBJETS s e l e c t owner, o b j e c t t y p e, object name, s t a t u s from d b a o b j e c t s where s t a t u s!= VALID /

202/210 Utilitaires d audit Affichage des objets invalides (2) prompt TRIGGER s e l e c t t r i g g e r n a m e from d b a t r i g g e r s where s t a t u s!= ENABLED ; s p o o l o f f

203/210 Utilitaires d audit Résultat de la requête tps rep Service Time ************ Parse CPU : 38,111 (1.27%) Recursive CPU : 1,083,086 (36.19%) Other : 1,871,438 (62.53%) ------------------------ Total CPU : 2,992,635 (100%) Wait Time ********* Total Wait Time : 1,833,187,429 Response Time (Service Time + Wait Time) *************************************** Service Time : 2,992,635 (.16%) Wait Time : 1,833,187,429 (99.84%) -------------------------- Response Time : 1,836,180,064 (100%)

204/210 Utilitaires d audit Requête tps rep.sql (1) s e t s e r v e r o u t p u t on s i z e 1000000 s e t l i n e 80 d e c l a r e c u r s o r CalculCpu i s s e l e c t a. v a l u e t o t a l c p u, b. v a l u e p a r s e c p u, c. v a l u e r e c u r s i v e c p u, a. v a l u e b. v a l u e c. v a l u e o t h e r from v $ s y s s t a t a, v $ s y s s t a t b, v $ s y s s t a t c where a. name = CPU used by t h i s s e s s i o n and b. name = p a r s e time cpu and c. name = r e c u r s i v e cpu usage ;

205/210 Utilitaires d audit Requête tps rep.sql (2) c u r s o r CalculTime i s s e l e c t sum ( t i m e w a i t e d ) t o t a l w a i t t i m e from v $ s y s t e m e v e n t a where a. e v e n t not l i k e SQL% and a. e v e n t not l i k e KXFX% and a. e v e n t not l i k e s l a v e w a i t and a. e v e n t not l i k e Wait f o r s l a v e s% and a. e v e n t not l i k e P a r a l l e l%qu%i d l e%s l a% and a. e v e n t not l i k e r e f r e s h c o n t r o f i l e% and a. e v e n t not i n ( r e l i a b l e message, f i l e i d e n t i f y, f i l e open, d i s p a t c h e r t i m e r, v i r t u a l c i r c u i t s t a t u s, c o n t r o l f i l e p a r a l l e l w r i t e, c o n t r o l f i l e s e q u e n t i a l r e a d, r e f r e s h c o n t r o l f i l e command,

206/210 Utilitaires d audit Requête tps rep.sql (3) N u l l e v e n t, pmon t i m e r, rdbms i p c r e p l y, rdbms i p c message, r e l i a b l e message, smon t i m e r, wakeup time manager, PX I d l e Wait, SQL Net message to c l i e n t, SQL Net message from c l i e n t, SQL Net b r e a k / r e s e t to c l i e n t ) ; S e r v i c e T i m e NUMBER; WaitTime NUMBER; F i c 1 UTL FILE. FILE TYPE ;

207/210 Utilitaires d audit Requête tps rep.sql (4) b e gin F i c 1 := u t l f i l e. f o p e n ( / opt / a p p l /dwhv/ dbdc / o r a c l e / admin / dba /, t p s r e p. l i s, W ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) S e r v i c e Time ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) ) ; u t l f i l e. p u t l i n e ( Fic1, ) ; f o r Boucle i n C alculcpu l o o p u t l f i l e. p u t l i n e ( Fic1, P a r s e CPU : t o c h a r ( Boucle. p a r s e c p u, 999,999,999,999 ) ( round ( ( Boucle. p a r s e c p u / Boucle. t o t a l c p u ) 1 0 0, 2 ) %) ) ; u t l f i l e. p u t l i n e ( Fic1, R e c u r s i v e CPU : t o c h a r ( Boucle. r e c u r s i v e c p u, 999,999,999,999 ) ( round ( ( Boucle. r e c u r s i v e c p u / Boucle. t o t a l c p u ) 1 0 0, 2 ) %) ) ; u t l f i l e. p u t l i n e ( Fic1, Other : t o c h a r ( Boucle. o t h e r, 999,999,999,999 ) ( round ( ( Boucle. o t h e r / Boucle. t o t a l c p u ) 1 0 0, 2 ) %) ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) ) ;

208/210 Utilitaires d audit Requête tps rep.sql (5) u t l f i l e. p u t l i n e ( Fic1, T o t a l CPU : t o c h a r ( Boucle. t o t a l c p u, 999,999,999,999 ) (100%) ) ; S e r v i c e T i m e := Boucle. t o t a l c p u ; end l o o p ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 1 0 ) ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) Wait Time ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) ) ; u t l f i l e. p u t l i n e ( Fic1, ) ; f o r Boucle i n CalculTime l o o p u t l f i l e. p u t l i n e ( Fic1, T o t a l Wait Time : t o c h a r ( Boucle. t o t a l w a i t t i m e, 999,999,999,999 ) ) ; WaitTime := Boucle. t o t a l w a i t t i m e ; end l o o p ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 1 0 ) ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) Response Time ( S e r v i c e Time + Wait Time ) ) ;

209/210 Utilitaires d audit Requête tps rep.sql (6) u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) ) ; u t l f i l e. p u t l i n e ( Fic1, ) ; u t l f i l e. p u t l i n e ( Fic1, S e r v i c e Time : t o c h a r ( ServiceTime, 999,999,999,999 ) ( round ( S e r v i c e T i m e /( S e r v i c e T i m e+waittime ) 1 0 0, 2 ) %) ) ; u t l f i l e. p u t l i n e ( Fic1, Wait Time : t o c h a r ( WaitTime, 999,999,999,999 ) ( round ( WaitTime /( S e r v i c e T i m e+waittime ) 1 0 0, 2 ) %) ) ; u t l f i l e. p u t l i n e ( Fic1, c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) c h r ( 9 ) ) ; u t l f i l e. p u t l i n e ( Fic1, Response Time : t o c h a r ( S e r v i c e T i m e+waittime, 999,999,999,999 ) (100%) ) u t l f i l e. f c l o s e ( F i c 1 ) ; e x c e p t i o n when OTHERS then u t l f i l e. f c l o s e ( F i c 1 ) ; end ; /

210/210 Utilitaires d audit Résultat de la requête tps rep Service Time ************ Parse CPU : 38,111 (1.27%) Recursive CPU : 1,083,086 (36.19%) Other : 1,871,438 (62.53%) ------------------------ Total CPU : 2,992,635 (100%) Wait Time ********* Total Wait Time : 1,833,187,429 Response Time (Service Time + Wait Time) *************************************** Service Time : 2,992,635 (.16%) Wait Time : 1,833,187,429 (99.84%) -------------------------- Response Time : 1,836,180,064 (100%)