Découvrez l'architecture interne : la gestion de la mémoire (SGA, PGA) et les processus qui animent Oracle.
L'architecture interne d'Oracle 11g est conçue pour une efficacité maximale. Son but principal est de limiter les entrées/sorties (I/O) physiques sur le disque, qui sont des milliers de fois plus lentes que les opérations en mémoire vive.
Le fonctionnement d'Oracle repose sur deux structures de mémoire distinctes :
🧠 La SGA
(System Global Area)
Mémoire partagée, commune à tous
💼 La PGA
(Program Global Area)
Mémoire privée, dédiée à chaque utilisateur
Ces structures de mémoire sont animées par des processus (serveurs et de fond) qui assurent le mouvement des données entre la RAM et les fichiers disques.
La SGA est une zone de mémoire vive (RAM) partagée et unique pour chaque instance Oracle. Elle est allouée dynamiquement lors du démarrage de l'instance (étape NOMOUNT).
Elle est dite "partagée" car tous les processus utilisateurs et tous les processus de fond d'une même instance peuvent y accéder. Son rôle est central : elle sert de zone tampon pour les données, de cache pour les instructions SQL et de zone de transit pour les journaux de modifications.
🔗 Partage
Elle permet à plusieurs utilisateurs d'accéder aux mêmes données sans avoir à les relire sur le disque.
⚡ Performance
En gardant les données fréquemment utilisées en mémoire, elle réduit considérablement les temps de réponse.
⚙️ Configuration
Dans Oracle 11g, sa taille est gérée soit manuellement via plusieurs paramètres, soit automatiquement via le paramètre SGA_TARGET (Automatic Shared Memory Management).
Elle se décompose en plusieurs sous-zones spécialisées (pools), dont les plus importantes sont :
📦 Le Database Buffer Cache
Stockage des blocs de données.
📚 Le Shared Pool
Stockage du code SQL et du dictionnaire.
📝 Le Redo Log Buffer
Stockage des modifications.
🎯 Le Large Pool (Optionnel)
Pour les opérations lourdes comme les sauvegardes RMAN.
☕ Le Java Pool (Optionnel)
Pour l'exécution des procédures stockées en Java.
💡 Note de conception : La taille de la SGA est l'un des leviers les plus puissants pour l'optimisation (tuning) d'une base Oracle. Une SGA trop petite provoque des lectures disques excessives, tandis qu'une SGA trop grande peut saturer la RAM du serveur.
Le Database Buffer Cache est la zone de la SGA la plus importante en termes de volume. C'est le "garde-manger" des données : il contient des copies des blocs de données lus depuis les fichiers de données (Datafiles).
Lorsqu'un utilisateur souhaite consulter ou modifier des données, Oracle ne travaille jamais directement sur le disque. Le processus suit ces étapes :
Comme la mémoire est limitée par rapport à la taille de la base sur disque, Oracle doit faire de la place pour les nouveaux blocs via une liste LRU :
Les blocs les plus consultés sont gardés à une extrémité de la liste.
Les blocs les moins utilisés sont poussés vers l'autre extrémité pour être écrasés par de nouvelles données.
✅ Clean Buffers
Blocs lus mais non modifiés, ou blocs modifiés déjà écrits sur disque. Ils peuvent être supprimés sans risque.
⚠️ Dirty Buffers
Blocs modifiés en mémoire (via UPDATE) mais pas encore enregistrés sur disque. Le processus DBWR devra les synchroniser.
Le Redo Log Buffer est une zone de mémoire circulaire et de petite taille au sein de la SGA. Son rôle est vital pour la sécurité et la récupération (recovery) des données.
Chaque modification (INSERT, UPDATE...) génère une "entrée de reprise" (Redo Entry). Elle est stockée ici avant d'être écrite sur disque.
Les nouvelles informations écrasent les plus anciennes une fois transférées sur disque par le processus LGWR.
L'écriture sur disque est lente. En stockant d'abord en mémoire, Oracle permet aux transactions de continuer sans attendre. Le transfert vers les fichiers physiques est asynchrone.
Contrairement à la SGA partagée, la PGA est une zone de mémoire privée et exclusive à chaque processus serveur Oracle. Elle est allouée dans la RAM du serveur dès qu'une session utilisateur se connecte.
🔐 Zone SQL privée (Private SQL Area)
Stocke les infos spécifiques à l'exécution d'une requête
🧮 Zone de travail (SQL Work Areas)
Critique pour les requêtes complexes
ORDER BY| Caractéristique | SGA (System Global Area) | PGA (Program Global Area) |
|---|---|---|
| Accessibilité | Partagée par tous les processus | Privée à une seule session |
| Contenu | Données (blocs), Code SQL partagé | Variables, Tris, Jointures |
| Allocation | Au démarrage de l'instance | À la connexion de l'utilisateur |
| Objectif | Réduire les lectures disques (I/O) | Faciliter le traitement local |
Le Processus Serveur agit comme l'intermédiaire indispensable entre l'utilisateur (le client) et l'instance. Lorsqu'une application lance une commande SQL, c'est ce processus dédié qui s'exécute sur le serveur de base de données.
SELECT name FROM clients.⚠️ Note importante : Le processus serveur a le droit de lire sur le disque (Datafiles), mais dans un fonctionnement normal, il n'a jamais le droit d'y écrire. L'écriture est réservée aux processus de fond.
Ce sont les ouvriers invisibles qui assurent la maintenance, la sécurité et l'intégrité de l'instance Oracle. Sans eux, le système serait paralysé.
Responsable de l'écriture des blocs de données modifiés (Dirty Buffers) vers les Datafiles. Écrit de manière asynchrone pour ne pas ralentir le système.
Gère le transfert du Redo Log Buffer vers les fichiers Redo Log sur disque. Déclenché à chaque COMMIT pour garantir la récupération.
Coordinateur. Met à jour l'en-tête des fichiers de données et de contrôle pour signaler que la mémoire et le disque sont synchronisés.
Assure la maintenance système. Effectue la récupération automatique après un crash (Instance Recovery) et nettoie les espaces temporaires.
Surveille les processus utilisateurs. Nettoie les sessions en cas de plantage client et libère les verrous.
OPTIONNEL — Copie les Redo Logs pleins vers une destination d'archivage. Indispensable pour la restauration de données historiques.
Ce récapitulatif illustre le flux vital de la donnée dans Oracle.
📥 Flux de Lecture :
Utilisateur → Processus Serveur (Shared Pool) → Buffer Cache → Lecture Datafile (si absent)
✍️ Flux d'Écriture (Données) :
Modification utilisateur → Bloc "sale" (Buffer Cache) → DBWR écrit dans Datafile (Asynchrone)
🔐 Flux de Sécurité :
Modification → Redo Log Buffer → LGWR écrit dans Redo Log Files (Immédiat au COMMIT)