dimanche 6 août 2017

Dans le coeur du fonctionnement de la PGA, de la 9i a la 12c et du parametre PGA_AGGREGATE_LIMIT (suite de la gestion de la memoire)




Suite à la demande de mon cher et valeureux ami et frère, Joël Mengolo a qui j’exprime toute ma gratitude, j’aimerais compléter cet article en parlant en profondeur de la gestion d’une zone de mémoire PGA et du nouveau paramètre introduit dans la version 12c, PGA_AGGREGATE_LIMIT.

Historique :
Il faut dire que le paramètre PGA_AGGREGATE_TARGET a été introduit avec la version Oracle Database 9i, remplaçant ainsi les paramètres SORT_AREA_SIZE et HASH_AREA_SIZE utilisé en 8i.
Il faut rappeler que la PGA est une zone mémoire privée où les processus allouent de la mémoire pour les opérations de tris, de hash ou de merge. De ce fait la zone de PGA est séparée de la SGA (System Global Area). Une troisième zone de mémoire, la UGA (User Global Area), maintient l'information sur l'état des sessions et des curseurs. En mode dédié, les processus allouent la zone UGA dans la PGA alors qu'en mode partagé la zone UGA est allouée dans la SGA (dans la LARGE POOL plus exactement).
Le paramètre PGA_AGGREGATE_TARGET, comme son nom l'indique est un objectif et non une limite absolue. Cela signifie que suivant la charge la somme de mémoire allouée à la PGA peut dépasser cette limite. La PGA est allouée à la demande puisque chaque processus utilisateur crée une zone PGA.
Dans le version Oracle Database 12c, une nouvelle fonctionnalité a été introduite avec l’introduction du nouveau paramètre PGA_AGGREGATE_LIMIT qui permet de contrôler la quantité maximale de la mémoire PGA, consommée par les processus utilisateurs.
Dans les versions précédentes, le seul control disponible est le paramètre masqué _pga_max_size, qui pose une limite de la mémoire utilisée par chaque processus de manière individuelle. La paramètre PGA_AGGREGATE_LIMIT fixe la limite AGREGEE de la PGA totale.
Lorsque la valeur de PGA_AGGREGATE_LIMIT est en dehors de ses limites, les sessions ou processus utilisant la mémoire PGA la plus élevée sont résiliées et l’erreur suivante est écrite dans le fichier des alertes :
PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT of 3072 MB
Immediate Kill Session#: 41, Serial#: 397
Immediate Kill Session: sess: 0xc13a5066  OS pid: 5233
Le paramètre PGA_AGGREGATE_LIMIT est dynamique et sa valeur peut être changée base ouverte. La base de données n’a donc pas besoin d’être redémarrée :
SQL> alter system set pga_aggregate_limit=60G scope=both;
System Altered.
Notez toute fois que vous ne pouvez pas réduire la valeur de PGA_AGRREGATE_LIMIT indéfiniment, selon la configuration de votre base de données. Si cette valeur est trop faible, vous recevez l’erreur suivante :
Le paramètre PGA
SQL> alter system set pga_aggregate_limit=100M scope=both;
alter system set pga_aggregate_limit=100M scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified specified value invalid
ORA-00093: pga_aggregate_limit must be between 1694M and 100000G
Pour les DBA (Database Administrator), il est important d’être informe du comportement de ce nouveau paramètre. Si vous travaillez dans une base de données Oracle 12c et qu’une session se termine brutalement, vous devriez regarder si ce n’est pas l’effet de ce paramètre.


Merci à vous et je reste ouvert à toute remarque constructive.

Aucun commentaire:

Enregistrer un commentaire

How to fix errors : -         ORA-38760: This database instance failed to turn on flashback database -         ORA-38780: Restore poin...