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