La SGA - Notes de cours

publicité
L’instance
Chapitre 2, pages 23 à 33
Page 1
La SGA
-
SGA signifie : System Global Area
C'est une zone de mémoire partagée par les différents processus.
Sa taille initiale est définie par les paramètres du fichier de paramètres.
Elle est redimensionnable à chaud.
Accélère les traitements en gardant en mémoire des informations réutilisables par plusieurs usagers,
plus précisément : données, plans de travail, les instructions
- Permet de ne pas écrire constamment sur le disque et optimise les I/O en regroupant les écritures
qui proviennent souvent des mêmes zones de données.
La SGA est subdivisée en plusieurs sections:
 Le cache : Database Buffer Cache (Cache de tampon)
o Contient les blocs de données les plus récemment utilisés (table, index)
o Contient 2 types de bloc :
 Lorsqu’un bloc est modifié (ex : UPDATE), il garde une version avant
modification. C’est le segment d'annulation
 Valeurs actuelles des colonnes d’une table, d’un index
 Le cache : Redo log-Buffer
o Anciennes et nouvelles valeurs des lignes d’une modification dans le buffer
 Ensemble de vecteurs, décrivant chaque modification atomique d’un bloc (table,
index ou segment d’annulation). Séquentiel
 Le pool : Shared-Pool (pool partagé) :
o Contient deux sous-caches
 Le cache: Library-cache
 Le cache: Dictionary-cache
o Le shared-pool est dimensionné dans le fichier de paramètres par le paramètre:
 SHARED_POOL_SIZE (10 à 100 Mo)
 Le Java-pool
o Mémoire utilisée par la machine virtuelle de Java intégrée
 Il est possible d’appeler du code Java directement à partir d’une fonction
PL/SQL, par exemple.
 Le Large-pool
o Pour les transactions sur plusieurs bases de données
o Opérations de sauvegarde et restauration d’Oracle
o Zone optionnelle
 Le Streams-pool
o Gestion du partage de données et d’événements dans un système distribué.
 Ex : plusieurs bases de données. Il change les données sur 1 BD source et la
propage sur les autres
 Le result Cache
o Cache pour le résultat des requêtes et fonctions PL/SQL
Page 2
Gestion automatique de la mémoire à travers les éléments du SGA et du PGA
 Nom : Automatic Memory Management – AMM
o Utiliser le paramètre : MEMORY_TARGET
 Autrement, il est possible d'activer la gestion dynamique de la SGA. Pour ce faire, dans le fichier
de paramètres, utiliser le paramètre : SGA_TARGET (mémoire totale allouée au SGA)
o Ainsi, les Shared-pool, Large-pool, Java-pool, DataBase-buffer-cache seront ajustés
automatiquement
 Mais pas le redo log buffer, ni certains pool du database buffer cache (ex :
DB_RECYCLE_CACHE_SIZE)
Le Shared Pool
Le shared pool (qui est dans le SGA) contient :
Le "Dictionary-cache" (cache de la structure de la base de données)



Utilisé lors de la phase d'analyse de la requête. Permet de vérifier que l'objet existe, et que
l’usager y a accès.
Il contient toutes les informations relatives à la BD : liste des tables, des colonnes, utilisateurs et
leurs droits, …
La majeure partie (ou l’ensemble) du dictionnaire de données est placée en RAM, dans ce cache
mémoire. Il est utilisé pour analyser et pour valider les accès aux usagers, le nom des colonnes
des tables,…)
Le "Library-cache" (ne cache pas le résultat de la requête, mais le résultat de l’analyse de la
requête)



Au début de chaque requête, Oracle doit analyser si la requête est valide. Si c’est le cas, on
sauvegarde l’énoncé de la requête ainsi que le résultat de l’analyse dans la Library cache. Ceci
sauve du temps d’exécution pour les requêtes identiques ultérieures
Utilise le LRU (least recently used)
Partagé entre tous les usagers
o Donc réutilisable d’un usager à un autre.
o Utilisation de variables "bind" : «SELECT * FROM emp WHERE id = :v; »
 Voir p.25 du livre Oracle 11g Administration sur notion de requêtes identiques.
Exemple :
Le résultat de l'analyse du texte «SELECT Sal FROM Emp WHERE NoEmp = 10;» est conservé
(Syntaxe ok? Colonnes et tables existantes?), ainsi que son plan d’exécution (boucle jusqu’à la
découverte de NoEmp=10).
Le texte
«Select
* FROM Emp;» EST DIFFÉRENT DE
«SELECT
* from EMP;»
Page 3
Le "Database-Buffer cache" (cache de données)





But : garder en mémoire les blocs de données qui pourraient être réutilisées.
Ce sont les blocs de données (tables, indexes..) les plus récemment utilisés (SELECT,
UPDATE, INSERT….) par TOUS LES USAGERS.
Utilise LRU
Il conserve les blocs de segments d'annulation (pour un éventuel ROLLBACK) contenant la
version précédente des données en cours de modification
Ce cache est dimensionné dans le fichier de paramètres par le paramètre: DB_CACHE_SIZE
Le "RedoLog-buffer" (cache de journalisation)



Ce cache garde en mémoire les informations sur les modifications apportées à la BD.
Anciennes et nouvelles valeurs des lignes d’une modification dans le buffer.
Ce cache est dimensionné dans le fichier de paramètres par le paramètre: LOG_BUFFER
Le PGA



Program Global Area (mémoire privée des processus utilisateurs)
Cette section de la mémoire est dimensionnée par le paramètre: PGA_AGGREGATE_TARGET
Utilisé pour :
o Les tris
o Informations de session (permission, droits, ...)
o Les variables de session (ex : lorsque vous êtes connectés à SQL*PLUS)
Les processus serveurs
- Chaque processus serveur assure le lien entre une application et la base de données.
Dès qu'une application demande l'accès à l'instance ORACLE, un processus serveur analyse la requête
et s'occupe de vérifier que les données sont présentes dans le Database Buffer Cache. Si les
données ne sont pas en cache, le processus serveur vérifie les droits (profil et privilèges) puis fait la
lecture dans les fichiers de données.
- Il y deux mode de fonctionnement possibles et présents simultanément
o Un processus dédié par usager/connexion
o Un processus partagé par plusieurs usagers/connexions. Dans ce cas une partie de la
PGA est stocké dans le Large Pool
Page 4
Le mécanisme de synchronisation
- Périodiquement, tous les blocs des fichiers de données modifiés (dirty) sont écrits dans les fichiers de
données. Ceci est le mécanisme de synchronisation.
- Pour ce faire, il y a les concepts suivants :
o SCN (System Change Number) : Numéro incrémenté à chaque validation de transaction
(COMMIT) effectuée par un usager ou par un processus Oracle.
o Point de reprise : Numéro qui correspond au SCN du bloc le plus ancien modifié dans la
cache de données, mais qui n’a pas encore été écrit dans les fichiers de données.
- La synchronisation est déclenchée :
o Lors d’un basculement,
o de l’arrêt de la BD,
o mise hors ligne d’un tablespace.
- Lors d’une synchronisation, le mécanisme :
o déclenche le DBWn qui écrit les blocs modifiés (dirty) dans les fichiers de données.
o bloque le LGWR s’il vient pour écraser un groupe de journalisation dont la
synchronisation n’est pas encore terminée par le DBWn.
Processus d’arrière-plan
DBWn
LGWR
CKPT
SMON
PMON
ARCn
CJQn
: Database Writer
: Log-Writer
: Checkpoint
: System Monitor
: Process Monitor
: Archiver
: Job Queue
Le processus «Database Writer» (DBWn)
- Le processus DBWn est responsable, au moment opportun, du transfert des données modifiées de
la Database Buffer Cache vers les fichiers de données.
- S'appui sur l'algorithme LRU ("Least Recently Used") qui permet d'effectuer rapidement des
réaménagements pour libérer de l'espace en RAM.
- Bref, on prend ce qui a dans le database buffer cache et transfert vers les fichiers de données
o L’écriture arrive quand :
 Plus de place disponible dans le cache
 Périodiquement, pour faire avancer le point de reprise (position dans les fichiers
de journalisation à partir de laquelle la récupération de l’instance est
susceptible de démarrer). Cela permet de réduire le temps de récupération
après une panne.
 On parle de synchronisation. Celle-ci est déclenchée après un logswitch.
- Donc l’écriture est différée et n’est pas nécessairement déclenchée lors d’un COMMIT
Page 5
Le processus «Log Writer» (LGWR)
- Le processus LGWR permet de transférer les informations de la cache de journalisation vers les
fichiers de journalisation.
- Les informations sont stockées en RAM et sur disque de manière séquentielle et circulaire.
- Le Redo-Log-buffer n’est pas ajustable à chaud.
- Il peut être bloqué si le DBW est en cours d'exécution
- Transfert au maximum à toutes les trois(3) secondes vers le fichier de journalisation.
- Démarre après :
o Un commit d’une transaction
o Redo Log Buffer est au tiers plein
o Le délai de 3 secondes est dépassé
o Database Writer s’apprête à écrire des blocs modifiés de transactions non validées dans
les fichiers de données dû à un manque de cache
CKPT (Checkpoint)
- Processus qui a comme rôle de mettre à jour le point de reprise dans les fichiers de données et de
contrôles.
PMON
- C'est le processus de surveillance des processus, s'occupe de libérer le cache de tampons de données
ainsi qui toutes les autres ressources exploitées par un utilisateur.
- Il permet donc de faire le nettoyage lorsqu’un processus utilisateur est interrompu abruptement.
Par exemple lors de la fermeture d'une application PL/SQL sans se déconnecter ou lors d'une
quelconque défaillance.
- Annule (ROLLBACK) la transaction.
- Marque dans le cache de tampon de données (DataBase-buffer) les blocs associés à la transaction
comme disponibles.
- Libère les verrous placés sur les lignes de la table utilisée.
- Supprime l'identifiant du processus déconnecté de la liste des processus actifs.
SMON
- C'est le processus de surveillance du système. En temps normal:
o Il défragmente les fichiers de données.
o Il libère le tablespace temporaire des données utilisées lors de tris (group by, order by).
- De plus il permet d'effectuer la récupération de l’instance (mémoire RAM) après un arrêt
ANORMAL (ABORT). Il effectue donc:
o Un «Roll forward» qui consiste à appliquer aux fichiers de données les modifications
non sauvegardées des transactions validées (COMMIT) à partir du fichier de
journalisation.
o Un «Roll back» : qui consiste à enlever des fichiers de données les modifications
sauvegardées des transactions non validées.
Page 6
ARCn
Archivage des fichiers de journalisation (optionnel)
Exemple suite à un LOGSWITCH (i.e. donc une synchronisation):
DBW
écrit les données modifiées
CKPT
met à jour le point de reprise dans les fichiers de données et contrôle (checkpoint #)
LGWR poursuit sur le nouveau fichier de journalisation
ARC
fait une copie du groupe (un des fichiers) de journalisation que l’on vient de quitter et
l’archive.
Graçe à l’archivage des fichiers de journalisation, il est possible de revenir à un état de base de données
à n’importe quel moment.
 Utile lorsqu’il y a un problème avec la base de données et nous voulons retourner à un point X
défini.
CJQn
Exécution périodiquement de tâches programmées. Fermer un tablespace, par exemple.
Exemple :
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name
=> 'oe.my_job1',
job_type
=> 'PLSQL_BLOCK',
job_action
=> 'BEGIN DBMS_STATS.GATHER_TABLE_STATS(''oe'',
''sales''); END;',
start_date
=> '15-JUL-08 1.00.00AM US/Pacific',
repeat_interval
=> 'FREQ=DAILY',
end_date
=> '15-SEP-08 1.00.00AM US/Pacific',
enabled
=> TRUE,
comments
=> 'Gather table statistics');
END;
/
Page 7
Autre idée visuelle de l’instance…
Page 8
Téléchargement