Utilisation de Database In-Memory avec Autonomous Database

La fonctionnalité Database In-Memory disponible sur Autonomous Database peut améliorer considérablement les performances des analyses en temps réel et des charges de travail mixtes.

A propos de Database In-Memory

Oracle Database In-Memory (Database In-Memory) est une suite de fonctionnalités qui améliore considérablement les performances des analyses en temps réel et des charges de travail mixtes.

La fonctionnalité Database In-Memory est utile dans les cas suivants :
  • Vous avez activé la fonctionnalité In-Memory pour votre base de données sur site et êtes en train de migrer de la base de données sur site vers Autonomous Database.

  • Les requêtes de votre base de données passent la majeure partie de leur temps d'exécution à analyser et filtrer les données, ainsi qu'à effectuer des jointures et des agrégations groupées.

  • Vous devez améliorer le temps de réponse de vos requêtes de nature analytique.

Le stockage en colonnes en mémoire est la fonctionnalité clé de Database In-Memory. Le magasin de colonnes en mémoire réside dans la zone en mémoire, qui est une partie facultative de la mémoire SGA (System Global Area). Lorsque cette option est activée pour In-Memory, les tables, partitions, sous-partitions et vues matérialisées sont renseignées dans un format en colonnes dans le magasin de colonnes In-Memory. Ce format en colonnes est optimisé pour les analyses très rapides, ce qui permet aux requêtes analytiques d'exécuter des ordres de grandeur plus rapidement que les requêtes basées sur un format de ligne. Pour plus d'informations, reportez-vous à Oracle Database In-Memory.

Le stockage en colonnes en mémoire augmente dynamiquement au fil du temps pour s'adapter aux objets INMEMORY les plus chauds. Vous pouvez utiliser la clause de table PRIORITY ou disposer d'analyses de table continues pour vous assurer que le stockage en colonnes en mémoire augmente suffisamment pour votre charge globale. Pour plus d'informations, reportez-vous à Redimensionnement du stockage en colonnes en mémoire.

Vous pouvez utiliser la clause INMEMORY dans les instructions DDL afin d'activer In-Memory pour les objets suivants :
  • Tables (y compris les tables externes)

  • Partitions ou sous-partitions

  • Vues matérialisées

Pour plus d'informations, reportez-vous à Activation des objets pour le remplissage en mémoire.

Pour activer Database In-Memory, tenez compte des points suivants :

  • Database In-Memory est uniquement disponible pour une instance Autonomous Database avec :

    • Le modèle de calcul ECPU

    • 16 ECPU au minimum

  • Si vous redémarrez la base de données, les objets activés pour INMEMORY doivent être remplis à nouveau dans la banque de colonnes en mémoire. Selon le paramètre de priorité, la réalimentation peut se faire automatiquement ou lors du premier accès. Si vous surveillez les performances, vous remarquerez des performances plus lentes jusqu'à ce que l'objet soit rempli à nouveau.

Activation des objets pour le remplissage en mémoire

Vous pouvez activer et désactiver les objets pour leur remplissage dans le magasin de colonnes en mémoire.

Seuls les objets avec la clause INMEMORY peuvent être insérés dans le magasin de colonnes en mémoire. Utilisez les instructions DDL CREATE TABLE ou ALTER TABLE pour appliquer la clause INMEMORY.

Par défaut, les objets sont créés avec l'attribut NO INMEMORY, ce qui signifie qu'ils ne peuvent pas être insérés dans le magasin de colonnes en mémoire.

L'activation d'un objet en tant que INMEMORY indique qu'un objet peut potentiellement résider dans le magasin de colonnes en mémoire. Le remplissage en mémoire est une étape distincte qui se produit lorsque la base de données lit les données existantes au format ligne, les transforme en format colonne, puis les stocke dans le magasin de colonnes en mémoire. Par défaut, toutes les colonnes d'un objet avec l'attribut INMEMORY sont alimentées dans le magasin de colonnes en mémoire.

La définition de l'attribut INMEMORY sur un objet implique que l'objet est candidat pour le remplissage dans le magasin de colonnes en mémoire. L'objet n'est pas immédiatement renseigné dans le magasin de colonnes en mémoire. Toutefois, vous pouvez utiliser la clause PRIORITY avec l'attribut INMEMORY pour contrôler la priorité d'alimentation dans le magasin de colonnes en mémoire. La clause PRIORITY peut être indiquée avec les valeurs suivantes :

  • CRITICAL : l'objet est rempli immédiatement après l'ouverture de la base de données.

  • HIGH : l'objet est rempli une fois que tous les objets CRITICAL ont été remplis, si de l'espace reste disponible dans le magasin de colonnes en mémoire.

  • MEDIUM : l'objet est rempli une fois que tous les objets CRITICAL et HIGH ont été remplis et que de l'espace reste disponible dans le magasin de colonnes en mémoire.

  • LOW : l'objet est rempli une fois que tous les objets CRITICAL, HIGH et MEDIUM ont été remplis, si de l'espace reste disponible dans le magasin de colonnes en mémoire.

  • NONE : les objets ne sont remplis qu'après avoir été scannés pour la première fois, si de l'espace est disponible dans le magasin de colonnes en mémoire. La priorité NONE est la priorité par défaut.

Exemple de création d'une table avec l'attribut INMEMORY :

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY;
Cet exemple crée la table im_emp avec l'attribut INMEMORY. L'exemple utilise la priorité par défaut NONE pour la clause INMEMORY, ce qui signifie que la table n'est remplie qu'après avoir été analysée pour la première fois.

Exemple d'utilisation de la clause PRIORITY avec l'attribut INMEMORY :

CREATE TABLE im_emp_1 (
    id  NUMBER,  name VARCHAR2(20),  
    depno NUMBER,  sal   NUMBER,  
    mgr   NUMBER,  
    loc   VARCHAR2(20)) 
    INMEMORY PRIORITY CRITICAL;

Exemple de définition de l'attribut INMEMORY pour une table existante :

ALTER TABLE employees INMEMORY;

Cet exemple définit l'attribut dans INMEMORY pour la table employees.

Vous pouvez également modifier une table afin de définir l'attribut INMEMORY uniquement pour un sous-ensemble de colonnes de la table. Exemples :

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
Cet exemple définit l'attribut dans INMEMORY pour im_emp_tb, mais exclut la colonne depno.

Pour plus d'informations, reportez-vous à INMEMORY_TABLE_CLAUSE.

Une fois que INMEMORY est activé pour une table, vous pouvez interroger la vue V$IM_SEGMENTS pour déterminer si les données de la table sont remplies dans le magasin de colonnes en mémoire. Exemples :
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Pour plus d'informations, voir V$IM_SEGMENTS.

Une fois que l'objet est rempli dans le magasin de colonnes en mémoire, il n'est expulsé que lorsque l'objet est supprimé ou déplacé, ou qu'il est mis à jour avec l'attribut NO INMEMORY. Exemples :
ALTER TABLE im_emp NO INMEMORY;

Pour plus d'informations, reportez-vous à Fonctionnement du remplissage en mémoire.

Remarques relatives à l'activation des objets pour le remplissage en mémoire :

  • La base de données ne remplit pas automatiquement les objets en mémoire avec le paramètre PRIORITY de NONE. Toutefois, vous pouvez alimenter ces objets manuellement dans le magasin de colonnes en mémoire. Pour plus d'informations, reportez-vous à Remplissage manuel de la banque de colonnes IM et à Procédure DBMS_INMEMORY.POPULATE.

  • Il doit y avoir des balayages continus de table pour s'assurer que le stockage en colonnes en mémoire augmente automatiquement suffisamment pour votre charge globale. Si un objet est partiellement rempli, le balayage de table peut utiliser à la fois In-Memory et Exadata Smart Scan.

Dimensionner le stockage en colonnes en mémoire

Lorsque votre instance Autonomous Database comporte 16 ECPU ou plus, la fonctionnalité Database In-Memory est activée par défaut et In-Memory peut utiliser jusqu'à 50 % de la mémoire SGA.

La mémoire de la zone en mémoire n'est pas réservée à l'avance et sa taille initiale est de 0. La zone en mémoire augmente progressivement à chaque fois que l'espace disponible pour la population en mémoire est insuffisant.

Les objets du magasin en colonnes en mémoire sont gérés dynamiquement par la méthode AIM (Automatic In-Memory). La fonctionnalité en mémoire automatique est activée par défaut pour votre instance Autonomous Database.

AIM utilise des statistiques internes pour déterminer la fréquence d'accès aux objets et colonnes en mémoire. Si le magasin de colonnes en mémoire est plein et que d'autres segments plus fréquemment consultés bénéficient d'une alimentation dans le magasin de colonnes en mémoire, le magasin de colonnes en mémoire évite les segments inactifs.

Pour garantir que le jeu de données de travail est toujours alimenté, AIM évite automatiquement les segments froids (accès peu fréquent). Pour plus d'informations, reportez-vous à Automatisation de la gestion des objets en mémoire.

La taille maximale en mémoire par défaut de votre instance Autonomous Database peut atteindre 50 % de la taille de la mémoire SGA. Cependant, vous pouvez modifier la taille maximale en mémoire de votre instance Autonomous Database :
  • En modifiant le nombre d'ECPU pour votre instance Autonomous Database.

  • A l'aide de la procédure DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE pour modifier la taille maximale en mémoire. Vous pouvez indiquer une valeur comprise entre 0 et 70. Si vous indiquez une valeur égale à zéro (0), la base de données en mémoire est désactivée. Exemples :
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    Cet exemple modifie la taille maximale en mémoire à 60 % de la taille de la mémoire SGA.

Pour plus d'informations, reportez-vous à Procédure SET_SGA_PERCENTAGE.

Interrogez la vue V$INMEMORY_AREA pour extraire les informations sur l'allocation d'espace dans la zone en mémoire. Exemples :

SELECT * FROM V$INMEMORY_AREA;
Pour plus d'informations, voir V$INMEMORY_AREA.

Désactiver le stockage en colonnes en mémoire

Vous pouvez désactiver la banque de colonnes en mémoire pour votre instance Autonomous Database en modifiant la taille maximale en mémoire sur 0.

Exemples :

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

Cet exemple modifie la valeur de taille maximale en mémoire à zéro (0) et désactive Database In-Memory pour l'instance.

Pour plus d'informations, reportez-vous à Procédure SET_SGA_PERCENTAGE.