web-dev-qa-db-fra.com

ORA-04036: La mémoire PGA utilisée par l'instance dépasse PGA_AGGREGATE_LIMIT

Je suis tombé sur ORA-04036 (sur 12c) alors que l'un des membres de mon équipe était en train de créer un index de texte Oracle.

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
ORA-00039: error during periodic action
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
5
pahariayogi

dans mon cas, il a échoué en raison d'un degré parallèle 48 très élevé (nécessitant trop de session et une augmentation de PGA) lors de la création d'un index (ou de toute autre opération parallèle). Nous devons essayer de réduire le parallélisme pour éviter cela. J'ai essayé avec le script DOP 8 exécuté avec succès.

Dans Oracle Database 12c, un nouveau paramètre appelé PGA_AGGREGATE_LIMIT définit une limite stricte sur la quantité de PGA utilisée par une instance. Lorsque le PGA global occupé par toutes les sessions dans cette instance dépasse la limite, Oracle tue la session contenant la mémoire PGA la plus ineffaçable, libérant toute la mémoire PGA détenue par cette session. Cette session tuée reçoit ce message.

Notez la nouvelle erreur Oracle ORA-4036. Il s'agit d'une fonctionnalité extrêmement utile pour contrôler la consommation PGA incontrôlable par des sessions émettant des requêtes non accordées. Le paramètre pga_aggregate_limit, s'il n'est pas explicitement défini, vaut par défaut le plus grand de ces trois nombres: 2 Go 3 Mo fois la valeur du paramètre process 2 fois la valeur du paramètre pga_aggregate_target Mais cette limite ne dépasse pas 1,2 fois la mémoire physique totale après avoir enlevé la taille totale SGA. Vous n'aimez pas cette nouvelle fonctionnalité et vous souhaitez revenir au comportement précédent (avant 12c)? Sûr; définissez simplement la valeur de pga_aggregate_limit sur 0 et le paramètre n'aura aucun impact.

Publier une réponse dans l'intérêt des lecteurs de la communauté car je ne pouvais pas la trouver sur SO encore. Veuillez voir this pour une lecture plus approfondie ...

7
pahariayogi

J'ai eu un problème similaire et l'ai résolu en procédant comme suit.

Voyez ce qu'est le pga_aggregate_limit actuel (au cas où vous voudriez annuler vos modifications) en utilisant ceci:

show parameter pga_aggregate_limit;

Réglez pga_aggregate_limit à 0 en utilisant ceci:

alter system set pga_aggregate_limit = 0; 

Plus d'informations sont disponibles ici:

http://www.dba-Oracle.com/t_pga_aggregate_limit.htm

https://docs.Oracle.com/database/121/REFRN/GUID-E364D0E5-19F2-4081-B55E-131DF09CFDB3.htm#REFRN10328

4
John