SGA
| Fiche express | |
|---|---|
| Type | Architecture mémoire Oracle |
| Voir aussi | Instance · Tuning database |
La SGA (System Global Area) est la zone de mémoire partagée entre les différents processus d'une instance Oracle. Elle réside en mémoire physique (RAM) et est allouée au démarrage de l'instance.
Paramètres de dimensionnement
- SGA_MAX_SIZE : taille maximale allouable à la SGA
- SHARED_POOL_SIZE : taille du pool partagé
- DB_CACHE_SIZE : taille du cache pour la taille de bloc par défaut
- DB_nK_CACHE_SIZE : taille du cache pour des blocs de n Ko (2, 4, 8, 16, 32)
- LOG_BUFFER : taille du tampon de journalisation
Composants
- database buffer cache : cache des données
- redo log buffer : zone tampon des modifications en attente d'écriture
- shared pool : zone tampon partagée des requêtes analysées et du dictionnaire de données
- java pool : zone tampon de la machine virtuelle Java intégrée
- large pool : zone tampon utilisée par d'autres processus (RMAN, serveurs partagés...)
- streams pool : tampon utilisé par Oracle Streams / réplication
- result cache : cache des résultats de requêtes SQL
Shared pool
SHARED_POOL_SIZE : taille du pool partagé (typiquement quelques dizaines à centaines de Mo)
Le shared pool se divise principalement en deux éléments : le library cache et le dictionary cache.
Library cache
Contient les informations relatives aux ordres SQL/PL-SQL déjà analysés :
- le texte de l'ordre
- la version analysée (parsée)
- le plan d'exécution
Cette mémoire conserve les requêtes récentes pour éviter de refaire leur analyse (parsing). L'algorithme LRU (Least Recently Used) gère l'éviction des entrées les moins utilisées.
L'utilisation de variables bind est recommandée pour favoriser le partage des requêtes (éviter qu'une requête ne soit reparsée pour chaque valeur littérale différente) :
SELECT * FROM client WHERE id = :v;
Le paramètre CURSOR_SHARING contrôle le comportement de partage des curseurs.
Dictionary cache
Aussi appelé row cache, il contient la liste des users, colonnes, tables, vues, etc. :
- structures de stockage
- description des tables
- droits des utilisateurs
Ces informations sont stockées dans le tablespace SYSTEM et mises à jour lors des ordres DDL (Data Definition Language : CREATE, ALTER, DROP).
Vues statiques : USER_%, ALL_%, DBA_% (par exemple %_OBJECTS, %_TABLES, %_TAB_COLUMNS, %_INDEXES, %_TRIGGERS, %_CONSTRAINTS, %_CONS_COLUMNS, %_VIEWS, %_SYNONYMS, %_SEQUENCES, %_SOURCE).
SELECT * FROM dictionary WHERE table_name LIKE 'USER%SEQ%';
Vues dynamiques de performance (préfixées v$) : v$INSTANCE, v$DATABASE, v$SGA, v$SGAINFO, v$PARAMETER.
SELECT name, value FROM v$parameter WHERE name LIKE '%block%';
Database buffer cache
Contient les blocs de données récemment lus : blocs de tables, blocs d'index, blocs de segments d'annulation (undo). Géré lui aussi par un algorithme LRU.
DB_CACHE_SIZE : taille du cache pour la taille de bloc par défaut DB_nK_CACHE_SIZE : taille du cache pour les blocs de n Ko
Deux pools additionnels existent :
- pool KEEP — conserve les données le plus longtemps possible en mémoire (DB_KEEP_CACHE_SIZE)
- pool RECYCLE — évacue rapidement les données peu susceptibles d'être réutilisées (DB_RECYCLE_CACHE_SIZE)
Redo log buffer
Stocke les modifications apportées à la base avant leur écriture dans les fichiers de journalisation (redo logs).
LOG_BUFFER
Java pool
JAVA_POOL_SIZE (24 Mo par défaut)
Large pool
Utilisé notamment dans les configurations de serveurs partagés (shared server) et par RMAN.
LARGE_POOL_SIZE
Streams pool
STREAMS_POOL_SIZE
Result cache
Stocke les résultats de requêtes pour éviter de les recalculer.
RESULT_CACHE_MAX_SIZE
Bug corrigé : la page source contenait des liens internes cassés vers [[:Catégorie:oracle]] insérés au milieu du texte descriptif (probablement un copier-coller malheureux) — retirés dans cette version.
Voir aussi
- Instance — architecture générale d'une instance Oracle
- Tuning database — vues d'aide au dimensionnement mémoire (v$sga_target_advice...)
- Serveur oracle — prérequis système (dont paramètres noyau liés à la SGA)