Passer au contenu

Comment puis-je gérer les problèmes de faible mémoire disponible ou d'utilisation élevée de l’échange dans mon instance de base de données Amazon RDS for Oracle ?

Lecture de 8 minute(s)
0

Je souhaite gérer les problèmes liés à une faible quantité de mémoire libre ou à une utilisation élevée de l’échange dans mon instance Amazon Relational Database Service (Amazon RDS) pour Oracle Database (DB).

Brève description

Dans les bases de données Oracle, la mémoire disponible est principalement utilisée par la zone globale du programme (PGA) et la zone globale du système (SGA). Lorsque vous configurez une instance de base de données Oracle, assurez-vous que la somme de ces deux composants est inférieure à la mémoire physique totale. Vous devez régler les paramètres de mémoire pour éviter une utilisation excessive de l’échange et une utilisation importante de la mémoire physique. Pour plus d'informations sur l'utilisation de l’échange et les limites recommandées, consultez la section Pourquoi mon instance de base de données Amazon RDS utilise-t-elle de la mémoire d'échange alors que je dispose d’une mémoire suffisante ?

Si votre instance de base de données utilise la gestion automatique de la mémoire, la quantité totale de mémoire utilisée par les bases de données Oracle est gérée par les paramètres MEMORY_TARGET et MEMORY_MAX_TARGET. La valeur définie dans MEMORY_TARGET est égale à la somme de SGA et PGA. La mémoire utilisée par SGA est déterminée par les paramètres SGA_MAX_SIZE et SGA_TARGET. La mémoire utilisée par PGA est gérée par les paramètres PGA_AGGREGATE_TARGET et PGA_AGGREGATE_LIMIT. Les valeurs par défaut de ces paramètres sont définies à un niveau élevé pour des raisons de performances. Cependant, dans certains cas d'utilisation, ces valeurs élevées peuvent entraîner une contention de mémoire et une utilisation élevée de l’échange.

Résolution

Pour résoudre ce problème, utilisez l'une des méthodes suivantes en fonction du mode de gestion de la mémoire de votre instance.

  • Si votre instance de base de données utilise la gestion automatique de la mémoire, diminuez la valeur de MEMORY_TARGET.
  • Si votre instance de base de données utilise la gestion automatique de la mémoire partagée, diminuez les valeurs des paramètres PGA et SGA de votre instance.

Remarque : bien que ces paramètres soient des paramètres dynamiques, vous devez redémarrer votre instance sans basculement pour que ces paramètres soient modifiés. Pour plus d'informations, consultez la note figurant dans la section Activation de HugePages pour une instance RDS pour Oracle.

Procédez comme suit :

  1. Assurez-vous que votre instance de base de données utilise la gestion automatique de la mémoire ou la gestion automatique de la mémoire partagée. Pour vérifier les paramètres SGA, PGA et MEMORY_TARGET, exécutez la commande suivante :

    SQL> SHOW PARAMETER SGA;
    SQL> SHOW PARAMETER PGA;
    SQL> SHOW PARAMETER MEMORY_TARGET;

    Si MEMORY_TARGET est défini, l'instance utilise la gestion automatique de la mémoire.
    Si MEMORY_TARGET n'est pas défini, mais que SGA_TARGET et PGA_AGGREGATE_TARGET sont définis, l'instance utilise la gestion automatique de la mémoire partagée.

    Pour plus d'informations, consultez la section Activation de la gestion automatique de la mémoire sur le site Web d'Oracle.

  2. Pour afficher l'utilisation de la mémoire par PGA et SGA, exécutez la commande suivante :

    SQL> SELECT (value/1024/1024) CURRENT_PGA_ALLOCATED_IN_MB FROM V$PGASTAT WHERE NAME ='total PGA allocated';SQL> SELECT SUM (bytes/1024/1024) CURRENT_SGA_SIZE_IN_MB,con_id FROM V$SGASTAT group by con_id;

    Pour afficher la mémoire maximale allouée au PGA et au SGA, après le dernier redémarrage, exécutez la commande suivante :

    SQL> SELECT (value/1024/1024) MAX_PGA_ALLOCATED_IN_MB FROM V$PGASTAT WHERE NAME = 'maximum PGA allocated';SQL> SELECT SUM (bytes/1024/1024) MAX_SGA_SIZE_IN_MB FROM V$SGAINFO WHERE NAME='Maximum SGA Size';

    Pour consulter les avis consultatifs pour PGA et SGA, exécutez la commande suivante :

    SQL> SELECT PGA_TARGET_FOR_ESTIMATE,PGA_TARGET_FACTOR, ADVICE_STATUS, ESTD_TIME, ESTD_PGA_CACHE_HIT_PERCENTAGE FROMV$PGA_TARGET_ADVICE ORDER BY PGA_TARGET_FACTOR;
    SQL> SELECT SGA_SIZE,SGA_SIZE_FACTOR, ESTD_DB_TIME_FACTOR, ESTD_PHYSICAL_READS FROMV$SGA_TARGET_ADVICE ORDER BY SGA_SIZE ASC;

    Remarque : dans la configuration CDB, la commande V$PGASTAT affiche les informations spécifiques à la PDB que vous effectuez dans la requête.

  3. Pour éviter une consommation de mémoire excessive et une utilisation élevée de l’échange, définissez les paramètres de mémoire. Ces paramètres vous aident à optimiser les performances de la base de données. Vous pouvez modifier tous les paramètres de ces exemples à l'aide du groupe de paramètres d'instance.

    Si votre instance utilise la gestion automatique de la mémoire, seul le paramètre MEMORY_TARGET est défini. Par défaut, ce paramètre est défini sur la valeur suivante :

    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*3/4}

    Si votre instance utilise la gestion automatique de la mémoire partagée, les paramètres de PGA_AGGREGATE_TARGET et SGA_TARGET sont définis sur les valeurs par défaut suivantes :

    PGA_AGGREGATE_TARGET= {DBInstanceClassMemory*1/8}
    SGA_TARGET= SGA_MAX_SIZE = {DBInstanceClassMemory*3/4}

    Si l'utilisation de la mémoire avec ces paramètres par défaut est élevée, ajustez les paramètres par défaut pour limiter la mémoire utilisée par l'instance Oracle. Utilisez les avis consultatifs de mémoire précédents pour ajuster les paramètres de mémoire. Il est recommandé de régler les paramètres de mémoire dans un environnement de test avant d'appliquer les modifications aux bases de données de production.

    Exemple Si votre instance gère automatiquement la mémoire, réduisez uniquement les valeurs MEMORY_TARGET et MEMORY_MAX_TARGET :

    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*1/2}
    -ou-
    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*3/5}
    -ou-
    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*2/3}

    Exemple Si votre instance utilise la gestion automatique de la mémoire partagée, réduisez uniquement les paramètres de mémoire de SGA et/ou PGA en fonction des valeurs consultatives indiquées à l'étape précédente :

    SGA_TARGET = {DBInstanceClassMemory*1/2}
    -ou-
    SGA_TARGET = {DBInstanceClassMemory*2/3}

    Pour régler l'utilisation de la mémoire de la zone mémoire du programme, définissez la valeur suivante pour PGA_AGGREGATE_TARGET :
    PGA_AGGREGATE_TARGET = {DBInstanceClassMemory*1/12}

  4. Dans certains cas d'utilisation, l'utilisation de la mémoire par le PGA peut dépasser la valeur PGA_AGGREGATE_TARGET et atteindre la valeur définie dans le paramètre PGA_AGGREGATE_LIMIT. La valeur par défaut de PGA_AGGREGATE_LIMIT dépend de la configuration de la mémoire de l'instance de base de données. Pour plus d'informations, consultez la page PGA_AGGREGATE_LIMIT sur le site Web d'Oracle.

    Si la valeur par défaut de PGA_AGGREGATE_LIMIT est très élevée, l'instance RDS peut avoir une mémoire physique très faible ou nulle pour l'hôte sous-jacent. Cela entraîne une utilisation élevée de l’échange et des problèmes de contention de mémoire.

    Pour résoudre ces cas d'utilisation, localisez les processus ou les requêtes qui utilisent une grande quantité de PGA. Pour afficher la répartition de la zone du programme par processus, exécutez la commande suivante :

    SQL> SELECT spid, program, round(pga_max_mem/1024/1024) max_MB, round(pga_alloc_mem/1024/1024)alloc_MB, round(pga_used_mem/1024/1024) used_MB, round(pga_freeable_mem/1024/1024) free_MB,con_id FROM V$PROCESS ORDER BY 4;

    Pour afficher l'utilisation de la mémoire par PGA pour les sessions utilisateur, à l'exclusion des processus en arrière-plan, exécutez la commande suivante :

    SQL> SELECT sum(p.pga_alloc_mem)/1024/1024 "PGA Allocated MEMORY OF USER SESSION (MB)",p.con_id FROM v$process p, v$session s WHERE P.ADDR = S.paddr and p.background IS NULL group by p.con_id;

    Pour afficher l'utilisation de la mémoire par PGA par session et les requêtes exécutées par chaque session, exécutez la commande suivante :

    SQL> SELECT s.username, p.pga_alloc_mem/1024/1024 "PGA Allocated MEMORY OF USER SESSION (MB)", q.sql_text,p.con_id FROM v$process p, v$session s, v$SQL q WHERE P.ADDR = S.paddr AND p.background IS NULL AND s.sql_id = q.sql_id ORDER BY 2;

    Remarque : dans la configuration CDB, vérifiez l'utilisation des ressources du conteneur par colonne avec _id. Dans une configuration non CDB, la colonne con_id est toujours égale à 0.

    Pour réduire l'utilisation élevée de la mémoire par PGA, appliquez une ou plusieurs des méthodes suivantes :

    Limitez la valeur de PGA_AGGREGATE_LIMIT. Cela peut empêcher l'instance de manquer de mémoire. Cependant, cela peut entraîner une défaillance des connexions lorsqu'une mémoire PGA supplémentaire est requise pour un processus.

    Réduisez la valeur SGA_TARGET. Cela permet à PGA_AGGREGATE_TARGET d’augmenter jusqu'à la valeur de PGA_AGGEGATE_LIMIT sans provoquer de problèmes de contention de mémoire.
    Augmentez la taille de la classe d'instance pour obtenir une taille d'instance plus grande avec plus de mémoire.

  5. Après avoir réglé les paramètres de mémoire comme indiqué dans les étapes précédentes, surveillez les performances de la base de données et consultez les avis consultatifs de la base de données.

    Si les limites des paramètres de mémoire entraînent une dégradation des performances, essayez d'augmenter la taille de l'instance. Cela permet d'utiliser davantage de mémoire pour que l'instance de base de données fonctionne efficacement.

    Utilisez le tableau de bord Performance Insights pour analyser la charge de travail de la base de données et identifier les requêtes qui utilisent le plus de mémoire. Réglez ensuite ces requêtes en utilisant la mémoire la plus élevée pour utiliser moins de mémoire.

Informations connexes

Architecture de mémoire sur le site Web d'Oracle.

AWS OFFICIELA mis à jour il y a 2 ans