I-
INTRODUCTION
La
gestion de la mémoire a beaucoup évolué avec les différentes versions d’Oracle
depuis la version 9i. Cet article est un aide-mémoire pour les DBA afin de
cerner les subtilités introduites dès la version 9i et ceux, jusqu’à la version
12c.
Le
tableau ci-dessous récapitule les différentes évolutions de la gestion de la
mémoire :
Version
|
SGA
|
PGA
|
Oracle
9i
|
C’est la SGA dynamique. Le DBA doit dimensionner individuellement
les différentes composantes de la SGA, mais ces composantes sont
redimensionnables à chaud.
|
C’est
la gestion automatique de la PGA. Le DBA alloue une quantité de mémoire
totale nécessaire pour la PGA agrégée des processus serveurs et Oracle se
charge de répartir cette mémoire automatiquement entre les différents les
processus en fonction des besoins.
|
Oracle
10g
|
C’est la gestion automatique de
la mémoire partagée.
Le DBA alloue une quantité de mémoire totale nécessaire pour la SGA et Oracle
répartit cette mémoire entre les processus de la SGA en fonction des besoins
|
Pareil
que dans la 9i
|
Oracle
11g/12c
|
C’est la gestion automatique de
la mémoire. Le
DBA alloue une quantité de mémoire totale à l’instance et Oracle répartit
cette mémoire automatiquement entre la SGA, ses différentes composantes et la
PGA en fonction des besoins
|
Note : La gestion automatique de
la mémoire ou la gestion automatique de la mémoire partagée requiert que le
paramètre d’initialisation STATISTIC_LEVEL soit fixé à TYPICAL ou ALL.
II-
GESTION
AUTOMATIQUE DE LA MEMOIRE PARTAGEE
Pour
activer la gestion automatique de la mémoire partagée (Automatic Shared memory
Management, ASMM), il suffit de fixer une valeur non nulle au paramètre
d’initialisation SGA_TARGET. Cette valeur spécifie la quantité de mémoire
totale allouée à la SGA, et elle est toujours inférieure ou égale à la valeur
de SGA_MAX_SIZE. Lorsque ASMM est activé, seuls les paramètres LOG_BUFFER,
DB_nK_CACHE_SIZE, DB_KEEP_CACHE_SIZE et DB_RECYCLE_CACHE_SIZE doivent être
dimensionnés manuellement. Tous les autres paramètres sont adaptés
dynamiquement en fonction de la charge du système et sont fixés à zéro.
Dans
ce mode de gestion, la SGA et la PGA sont gérés automatiquement mais c’est de
la responsabilité du DBA de répartir les mémoires disponibles pour Oracle,
entre ces deux structures (SGA_TARGET et PGA_AGGREGATE_TARGET).
La
valeur zéro de SGA_TARGET désactive le réglage automatique.
III-
GESTION
AUTOMATIQUE DE LA MEMOIRE
La
gestion automatique de la mémoire (Automatic Memory Management, AMM) a été
introduite à la version Oracle 11g et contrairement à la version Oracle 10g,
elle est répartie automatiquement entre la SGA et la PGA. Cette répartition est
adaptée dynamiquement en fonction de la charge du système. Les paramètres
d’initialisation MEMORY_TARGET et MEMORY_MAX_TARGET sont ajoutés pour assurer
AMM. Pour activer la gestion automatique de la mémoire, fixer une valeur non
nulle au paramètre MEMORY_TARGET ; MEMORY_MAX_TARGET désignant sa valeur
maximale.
Si
la gestion automatique de la mémoire est activée, tous les autres paramètres
sont fixé zéro. Néanmoins, SGA_TARGET et/ou PGA_AGGREGATE_TARGET peuvent avoir
des valeurs non nulles. Nous allons décrire tous les scénarios possibles :
·
Si
MEMORY_TARGET porte une valeur non nulle,
o
Si
SGA_TARGET et PGA_AGGREGATE_TARGET portent des valeurs non nulles, ces valeurs
sont considérées comme étant les valeurs minimales de la taille de la SGA et de
la PGA respectivement. Alors MEMORY_TARGET peut prendre une valeur comprise
entre
SGA_TARGET+PGA_AGGREGATE_TARGET et MEMORY_MAX_TARGET.
o
Si
SGA_TARGET porte une valeur non nulle et PGA_AGGREGATE_TARGET n’est pas défini
ou est nulle, alors les deux paramètres sont en mode auto-réglables et
PGA_AGGREGATE_TARGET peut prendre la valeur de MEMORY_TARGET-SGA_TARGET.
o
Si
SGA_TARGET n’est pas défini ou porte une valeur nulle et PGA_AGGREGATE_TARGET
porte une valeur non nulle, alors les deux paramètres sont en mode
auto-réglables et SGA_TARGET peut prendre la valeur de
MEMORY_TARGET-PGA_AGGREGATE_TARGET.
o
Si
SGA_TARGET et PGA_AGGREGATE_TARGET ne sont pas définis ou portent des valeurs
nulles, alors nous sommes en mode auto-réglage sans valeur minimale ou par
défaut. De manière générale, la règle attribue 60% à la SGA et 40% à la PGA au
démarrage de l’instance.
·
Si
MEMORY_TARGET n’est pas défini ou porte une valeur nulle,
o
Si
SGA_TARGET porte une valeur non nulle, alors les sous-composants de la SGA sont
auto-réglables. La PGA est également auto-réglable, qu’elle porte une valeur ou
pas, mais la globalité SGA (SGA_TARGET) et PGA(PGA_AGGREGATE_TARGET) n’est pas
auto-réglable ; c’est-à-dire que leurs valeurs ne varient pas
automatiquement.
o
Si
aucun des deux paramètres SGA_TARGET et PGA_AGGREGATE_TARGET ne sont définis ou
portent des valeurs nulles, la PGA sera auto-réglable mais la SGA ne le sera
pas. Les sous-composants de la SGA doivent donc être fixés manuellement.
o
Si
MEMORY_MAX_SIZE est non nulle et MEMORY_TARGET est nulle, le comportement est
le même que dans la version Oracle 10g.
Calcul
de Memory Target :
(Go de mémoire x
0,40) / Nombre de bases de données éventuelles = Go pour MEMORY_TARGET par base
de données
Dans
le fichier de paramètre, si vous omettez de fournir une valeur au paramètre
MEMORY_MAX_TARGET et que vous donnez une valeur au paramètre MEMORY_TARGET, la
base de données fixe automatiquement le paramètre MEMORY_MAX_TARGET à la valeur
de MEMORY_TARGET. Si on a plutôt l’inverse, MEMORY_TARGET prendra la valeur par
défaut zéro. Après le démarrage de l’instance, vous pourrez dynamiquement
changer cette valeur, à condition qu’elle n’excède pas MEMORY_MAX_TARGET.
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerTrès belle article Donatien. Quid de PGA_AGGREGATE_LIMIT dans la gestion automatique de la mémoire?
RépondreSupprimer