Radu Caulea .

 

 

Cours 'Tuning Oracle 7,8,8i,9i'

Notions fondamentales

Compteur

 

Ce cours qui dure trois jours présente les aspects essentiels de l'optimisation Oracle.

Tuning
  TABLE DES MATIERES
  Liste de tables
  Le tuning vu de haut
    Périmètre de l'intérêt 
    Vous avez choisi ORACLE. Et alors?
    Le DBA
      Le métier du DBA.
    Préambule
    Pourquoi optimiser ?
    Quand optimiser ?
    Les axes d'optimisation
    Comment optimiser ? 
      Planifier le système
      Optimiser le code
      Design des tables.
      Design applicatif
      Optimiser le SQL
      Optimiser les index
      Optimiser le noyau
    Tester votre système 
    Monitorisez les performances
    S'arrêter, mai quand ?
    Conclusion : l'approche méthodologique du tuning 
    Plan d'intervention détaillé
      Applicatif
      Mémoire
      DISK I/O et Hot Spots
        Comment choisir la taille du bloc Oracle ?
        Réduire les entrées / sorties!
        Raw device
        TABLESPACES
        LMT (locally managed tablespaces)
        VOLUMETRIE
      Les fichiers REDO LOG
  Architecture Oracle simplifiée
    Généralités
    Notions de cache
      Le cache CPU
      Le cache disque
      Les caches ORACLE
    
    SGA
    Shared pool
      Le LARGE POOL
        Gestion de l'espace dans le SHARED SQL
        Vieillissement du Shared Pool
        Nettoyage complet du Shared Pool
      Row Cache (DATA DICTIONARY CACHE)
    Database Buffer Cache
      Fonctionnement
      LRU, MRU, DIRTY LIST
      LRU
      LRU ou MRU : petite ou grosse (table) ?
      Fonctionnement - accès aux buffers
      LRU, algorithme modifié en 8i
      La lecture cohérente des blocs
      Écriture des buffers
      Multiple BUFFER POOL 
        Dimensionnement de chaque pool
    Redo Log Buffer
    Le LARGE POOL
    PGA
    UGA (USER GLOBAL AREA)	
    Caches additionnels (9i+)
    Les process background obligatoires
    Les process background facultatifs
    Les objets (types abstraits)
    La base de données (database)
    Les fichiers de données
    Les fichiers redo log (de journalisation)
      Log Miner
      Concepts
      Checkpoint
    Les fichiers de contrôle
    INIT.ORA
    SPFILE.ORA
    Modifier un paramètre
    Les fichiers de trace
    Le fichier alert.log
    Les fichiers archives redo
    Les tablespaces
      Généralités sur les tablespaces
      Utilité des tablespaces
    Les Segments
    Les extents
    Les blocs
    Connexion
  La cuisine intime Oracle
    Les blocs
      Blocs de données ORACLE
      Composants d'un bloc de données
      Contrôle de l'espace libre dans le bloc
      PCTFREE
      PCTUSED
        Déterminer les paramètres de remplissage par table
      Contrôler l'utilisation de l'espace
      Choix des paramètres
    Les freelists
      Les freelists transactionnelles. 
      Les process freelists 
    Les transactions
      Comment se déroule une transaction ?
    Les SCN
    Les ITL (interested transactions list)
    Les latch
      Tuning des latch
    Les locks
    Traitement SQL
      Détail du traitement SQL
      Ré-exécuter les ordres
      Select (Query)
      DML (Data Modification Language)
      Commit
      Ecriture dans les fichiers de données
      Les appels récursifs (recursive calls)
    L'accès optimal aux données – l'optimiseur
      Activation de l'optimiseur
      Approche RULE-BASED.
      Approche COST-BASED.
      Le choix d’Oracle démystifié : 
      La loi 95/5
        Les Hints
      Mise à jour des statistiques
      Génération de statistiques
      Dégradation des index
      Reconstruire un index
        La table pivot (driving table)
      Quelques règles à respecter
      Quelques précisions concernant les optimisations Oracle (RBO, CBO)
      Analyser les tables
      DBMSSTAT
      La non analyse du dictionnaire
    Les jointures
      NESTED LOOPS
      SORT-MERGE
      CLUSTER JOIN
      HASH JOIN
      INDEX JOIN
      Fast Full Index Scan
        Permettre le Fast Full-Index Scan
        Configuration
  Les outils de mesure
    EXPLAIN PLAN
    V$SQL_PLAN
    Traces de requêtes SQL (et tkprof)
      Mise en oeuvre
    Optimisation des ordres SQL et PL/SQL
    Les vues dynamiques
    UTLBSTAT/UTLESTAT
    TKPROF
      TKPROF : Considérations de tuning
    STATSPACK – nouveau en 8i
    Tuning avec l'événement 10046
      Niveaux de traçage de l'event 10046
      Activer et désactiver le traçage de l'event  10046
      Tracer la session courante
      Tracer une autre session
      Identifier le fichier de trace
      Ou est mon fichier de trace ?
      Interpréter le contenu du fichier trace
  Intervention – SGA 
    Intervention – SGA - database buffer cache
      Le hit ratio
      Améliorer le hit ratio
      Les attentes système concernant le cache
      Incidence de l'ajout de buffers (8.0-)
      db_cache_advice (9i+)
      Etat des buffers
      Utilisation des buffers
      Le cache et V$WAITSTAT
      Le cache et DBWR
      Mieux utiliser le cache
        Scotchez les données en mémoire
    Intervention – SGA - Shared pool – Le Library Cache
      Rappel de l'utilisation du cache
      Les curseurs
      Les trois phases de traitement SQL
        Parsing, optimisation et hit ratio du parse
        Execute
        Fetch
      Mieux ranger le code
      Taille du shared pool
      Modifier la taille du library cache.
      Mesurer les performances du library cache.
        Hit ratio du parse
        Miss Ratio du cache
      Utilisation du Library Cache : V$LIBRARYCACHE
        Interpréter les analyses de V$LIBRARYCACHE
      Utilisation de la sql area : V$SQLAREA
      Les attentes système concernant le shared pool
      Réduire les ratés dans le Library Cache
        Agrandir la taille du Library Cache
        Utiliser du code optimisé
        Curseurs améliorés (8i+)
        Accélérer l'accès au shared pool
        Mieux ranger le code dans le cache
        Utiliser la partie réservée du shared pool
        Scotcher l'ordre dans le shared pool
        Scotcher un package dans le shared pool
        Fixer le code rebelle dépisté en pleine production
        Cacher les curseurs
    Intervention – SGA – Shared Pool - DATA DICTONARY CACHE
      Utilisation du dictionary cache : V$ROWCACHE
    Intervention – SGA – LOG_BUFFER 
      FONCTIONNEMENT DES ENTREES REDO
      Mesurer les performances du cache redo log
        Le Hit ratio
      Statistiques sur la contention LOG_BUFFER
        Suivre V$SYSSTAT
        Compteurs dans V$SYSSTAT
        Recherche des contentions par les latches
      Optimisation du redo log buffer cache
        Suppression des contentions
        Accélération des écritures dans le buffer
      Contention sur les fichiers redo log
      Les attentes système concernant le redo log
      Vérifiez, agissez
      Checkpoint not complete 
      Profiter du nologging
      Réduction des opérations Redo
        SQL*Loader et Mode NOLOGGING 
        Direct Load Insert et mode NOLOGGING 
        Ordres SQL et NOLOGGING 
  Intervention – Mémoire de Tri (Sort Area)
    Qui utilise la SORT_AREA ?
    SORT_AREA_SIZE.
      Taille de la sort_area_size
    La PGA
      Fonctionnement
      Contenu
    PGA_AGGREGATE_TARGET (9i+)
      Informations dans V$SYSSTAT
      Informations dans v$pgastat
      Informations dans v$process
      Accélérer les tris
      Gestion des tris
  L'impact physique (tuning des E/S)
    Partitions, disques
    Le stockage de type RAID
      Trois  concepts
        Striping 
        Mirroring
        Parité
      Les types de  RAID
        RAID 0: concaténation
        RAID 1 : miroir
        RAID 3
        RAID 4
        RAID 5
      Raid ou pas raid ?
      RaidInfo
    Le partitionnement
      Partitionnement de type intervalle
      Partitionnement de type HASH
      Permettre le déplacement d’une ligne d’une partition vers une autre 
    db_file_multiblock_read_count
    High Water Mark
    Les segments temporaires
      Creation
    Détecter la fragmentation
      Les divers types de fragmentations
        La fragmentation des tablespaces
        La fragmentation des blocs de données
    Analyse de la répartition des E/S
      Les statistiques d'E/S.
      Optimisation des entrées / sorties
      Manual striping 
    Quelle taille de fichiers ? 
  Les Segments d'annulation (Rollback Segments)
    Rôle
    Fonctionnement interne
    La cuisine du rollback
    Utilisation
    Allocation par les transactions
    Pourquoi créer plusieurs rollback segments
    Ou placer les rollback segments ?
    Taille et nombre de rollback segments
      Taille d’un rollback segment
      Nombre d’extents
    Quelques conseils
    Optimisation des rollback segments
    Conclusion (rollback segments)
    ORA-1555 snapshot is too old
    Allouer un rollback à une grosse transaction
    La vue V$ROLLSTAT
  Gestion des latches
    Locks.
    Statistiques a contrôler dans V$SYSSTAT
    Recherche des contentions sur les segments
    Segments de données
      Contention sur les blocs d'entêtes de tables
      Contention sur les blocs de données
      Contentions sur les Rollbacks 
      Precautions
  Optimisation du CPU
    Contrôle
    Oracle et plusieurs processeurs
      Mesurer les charges CPU (OS)
      Identifier les sessions consommatrices
        Méthode 1 – top OS
        Méthode 2 – top SQL
        Méthode  3 – Détails pour sa PROPRE session
    Motifs de surconsommation de CPU
  Optimisation des produits
    Optimisation de l'Import/export
  SUIVI
    SGA
      DB_BLOCK_BUFFERS
        Utilisation (1)
        Utilisation (2)
        Utilisation (3)
      Shared pool
        Déterminer la mémoire disponible :
        Déterminer le volume occupé par un objet :
        Objets qui occupent plus de …
        Code qui nécessite de la mémoire contiguë :
        Requêtes semblables : 
        Paramètres qui jouent dans le calcul de la SGA
        Le HIT RATIO pour les utilisateurs connectés. 
        Performance des appels SQL (global, utilisation du cache library).
    Index
    Attentes
      Attentes au niveau du système 
    Attentes au niveau des sessions
    Les tris
    Les sessions qui utilisent plus de 10 000 octets de PGA.
    Utilisation du library cache : V$LIBRARYCACHE
      Déterminer la mémoire disponible dans le shared pool:
      Déterminer le volume occupé par un objet :
      Objets qui occupent plus de …
      Code qui nécessite de la mémoire contiguë :
    Requêtes semblables : 
    Preparer utlbstat/utlestat/statspack
    Gestion de l'espace
    Quels sont les process qui entourent la SGA ?
    UNIX
    Suivi des process
    Les attentes triées par type
    Le buffer cache
  Conclusion
  Paramètres importants de INIT.ORA
  Quelques vues dynamiques
  Les tables virtuelles d'attente
    Il y aura toujours une attente
    Les vues
      Vue globale du système: V$SYSTEM_EVENT
      V$SESSION_EVENT
      La perspective de bas niveau v$session_wait
  Statistiques dans V$SYSSTAT
    Classes de statistiques
      Utilisation générale de la base
      Verrouillages des données
      Activité sur les Buffers Database
      Activité sur les Buffers Redo Log 
      Accès aux tables :
      Parsings
      Tris 
    Statistiques a contrôler dans V$SYSSTAT
  Les attentes critiques
  Glossaire des événements
  STATSPACK
    Tuning avec STATSPACK (8i+)
    La notion de snapshot
    Utilisation de STATSPACK
    Installation de STATSPACK 
      Utilisateur PERFSTAT 
      Support de stockage 
      Installation effective de STATSPACK
      Installation automatisée de STATSPACK
    Utiliser PERFSTAT
      Exécuter STATSPACK
      Automatiser la collecte des statistiques
      Reporting
        Exécuter le rapport
    Paramétrer PERFSTAT
      Niveaux et limites
      Modifier les valeurs du niveau et des limites
      Modifier les valeurs par défaut des limites et du niveau
    Désinstaller STATSPACK
    Scripts SQL Oracle fournis en relation avec STATSPACK
    Documentation Oracle
  Exercices
  Appendices
     Le package de David
    Une brève histoire de temps
    Bien mesurer les attentes
    Indice des notations
  Phénomènes extraordinaires
    Tablespace temporaire anormalement grand
    Undo tablespace (9i+)
    Traitement sans fin, SGA énorme, aucune E/S
Bibliographie
  Fin