SGA

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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)