Cours : Optimisation des performances dans Oracle (Oracle Tuning)
## Introduction
L'optimisation des performances dans Oracle vise à améliorer l'efficacité des requêtes et à réduire
les temps de réponse.
Cela inclut l'analyse des structures, des index, des plans d'exécution et de l'utilisation des
ressources système.
## 1. Concepts de base de l'optimisation Oracle
### 1.1 Objectifs de l'optimisation
- Minimiser le temps d'exécution des requêtes SQL.
- Réduire l'utilisation des ressources système (CPU, mémoire, I/O).
- Maximiser la disponibilité et la fiabilité de la base.
### 1.2 Modes d'optimisation
- **Rule-Based Optimizer (RBO)** : Utilise des règles prédéfinies pour optimiser.
- **Cost-Based Optimizer (CBO)** : Prend en compte les statistiques et calcule le coût des
différentes stratégies.
## 2. Rôle des statistiques dans Oracle
### 2.1 Collecte de statistiques
Les statistiques permettent au CBO d'estimer le coût des opérations.
Commande principale :
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');
### 2.2 Statistiques importantes
- Nombre de lignes dans une table.
- Distribution des données dans les colonnes.
- Taille des index et fragmentation.
## 3. Les plans d'exécution
### 3.1 Introduction aux plans d'exécution
Un plan d'exécution montre les étapes qu'Oracle suit pour exécuter une requête SQL. Utilisez
EXPLAIN PLAN pour visualiser un plan.
### Exemple :
EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
### 3.2 Interprétation d'un plan
- **Full Table Scan** : Oracle lit toute la table.
- **Index Scan** : Oracle utilise un index pour accéder directement aux données.
- **Nested Loop** : Jointure en boucle imbriquée.
- **Hash Join** : Jointure utilisant des tables de hachage.
## 4. Les index dans Oracle
### 4.1 Types d'index
- **B-tree** : Par défaut, adapté pour la majorité des cas.
- **Bitmap** : Pour des colonnes avec peu de valeurs distinctes.
- **Fonctionnels** : Index sur une fonction ou une expression.
### 4.2 Création d'un index
CREATE INDEX emp_dept_idx ON employees(department_id);
### 4.3 Bonnes pratiques
- Créez des index pour les colonnes utilisées dans les clauses WHERE ou JOIN.
- Évitez les index inutiles sur des tables fréquemment modifiées.
## 5. Analyse et outils d'optimisation
### 5.1 SQL Trace
Activez le traçage pour analyser les performances :
ALTER SESSION SET sql_trace = TRUE;
### 5.2 TKPROF
Utilisé pour formater les traces SQL.
### 5.3 Rapports AWR
- Fournissent des analyses sur la charge de travail.
- Génération d'un rapport :
@$ORACLE_HOME/rdbms/admin/[Link]
## 6. Gestion de la mémoire
### 6.1 Structures mémoire importantes
- **SGA** : Partagée par tous les processus Oracle.
- **PGA** : Utilisée par chaque session.
Ajustez les paramètres :
ALTER SYSTEM SET db_cache_size = 500M;
### 6.2 Optimisation des caches
- Vérifiez l'utilisation avec des vues comme V$BUFFER_POOL_STATISTICS.
## 7. Identification et résolution des problèmes courants
### 7.1 Verrous et blocages
Identifiez les sessions bloquées :
SELECT * FROM V$LOCK WHERE BLOCK > 0;
### 7.2 Problèmes liés aux E/S
Surveillez les tables ou index générant des Full Table Scans inutiles.
## Conclusion
L'optimisation des performances Oracle nécessite une approche méthodique : analyser, identifier
les goulots d'étranglement, appliquer les correctifs et surveiller régulièrement les performances.
Utilisez les outils Oracle pour faciliter ce processus.