Utiliser Database In-Memory avec Autonomous AI Database

La fonction Database In-Memory disponible sur Autonomous Database peut améliorer considérablement la performance pour les analyses en temps réel et les charges de travail mixtes.

À propos de Database In-Memory

Oracle Database In-Memory (Database In-Memory) est une suite de fonctions qui améliore grandement la performance 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 fonction En mémoire pour votre base de données sur place et vous migrez maintenant de la base de données sur place vers la base de données autonome avec intelligence artificielle.

  • Les interrogations de votre base de données passent la majeure partie de leur temps d'exécution à balayer 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 interrogations de nature analytique.

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

Le magasin de colonnes en mémoire augmente dynamiquement au fil du temps pour prendre en charge les objets INMEMORY les plus en vogue. Vous pouvez utiliser la clause de table PRIORITY ou effectuer des balayages de table continus pour vous assurer que le magasin de colonnes en mémoire augmente suffisamment pour votre charge de travail. Pour plus d'informations, voir Taille du magasin de colonnes en mémoire.

Vous pouvez utiliser la clause INMEMORY dans les énoncés LDD pour 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, voir Activation des objets pour la population en mémoire.

Notez ce qui suit pour activer Database In-Memory :

  • Database In-Memory n'est disponible que pour une instance Autonomous AI Database dotée des caractéristiques suivantes :

    • Modèle de calcul ECPU

    • Minimum de 16 ECPU

  • Si vous redémarrez la base de données, les objets activés pour INMEMORY doivent être rechargés dans le magasin de colonnes In-Memory. Selon le paramètre de priorité, le rechargement 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 réalimenté.

Activation des objets pour la population en mémoire

Vous pouvez activer et désactiver les objets à alimenter dans le magasin de colonnes In-Memory.

Seuls les objets avec la clause INMEMORY sont admissibles à l'alimentation dans le magasin de colonnes en mémoire. Utilisez les énoncés LDD 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 sont pas admissibles à l'alimentation 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. La population In-Memory est une étape distincte qui se produit lorsque la base de données lit les données de format de ligne existantes, les transforme en format colonne, puis les stocke dans le magasin de colonnes In-Memory. 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 un candidat à la population dans le magasin de colonnes en mémoire. L'objet n'est pas immédiatement alimenté dans le magasin de colonnes In-Memory. 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 spécifiée avec les valeurs suivantes :

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

  • HIGH : L'objet est alimenté une fois tous les objets CRITICAL alimentés, si de l'espace reste disponible dans le magasin de colonnes en mémoire.

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

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

  • NONE : Les objets ne sont alimentés qu'après avoir été balayé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 pour créer 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 de NONE pour la clause INMEMORY, ce qui signifie que la table n'est alimentée qu'après son premier balayage.

Exemple pour utiliser 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 pour définir l'attribut INMEMORY pour une table existante :

ALTER TABLE employees INMEMORY;

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

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

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

Pour plus d'informations, voir 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 alimentées dans le magasin de colonnes en mémoire. Exemple :
SELECT SEGMENT_NAME, POPULATE_STATUS 
FROM   V$IM_SEGMENTS 
WHERE  SEGMENT_NAME = 'IM_EMP';

Pour plus d'informations, voir V$IM_SEGMENTS.

Une fois l'objet alimenté dans le magasin de colonnes In-Memory, l'objet n'est expulsé que lorsque l'objet est supprimé ou déplacé, ou lorsque l'objet est mis à jour avec l'attribut NO INMEMORY. Exemple :
ALTER TABLE im_emp NO INMEMORY;

Pour plus d'informations, voir Fonctionnement de la population en mémoire.

Notes pour activer les objets pour la population en mémoire :

  • La base de données n'alimente pas automatiquement les objets en mémoire avec le paramètre PRIORITY de NONE. Toutefois, vous pouvez alimenter manuellement ces objets dans le magasin de colonnes In-Memory. Pour plus d'informations, voir Alimentation manuelle du magasin de colonnes IM et Procédure DBMS_INMEMORY.POPULATE.

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

Dimensionnement du magasin de colonnes en mémoire

Lorsque votre instance de base de données autonome avec 16 ECPU ou plus, la fonction Database In-Memory est activée par défaut et jusqu'à 50 % de la mémoire SGA peut être utilisée par In-Memory.

La mémoire de la zone en mémoire n'est pas réservée à l'avance et la taille initiale de la zone en mémoire est 0. La zone en mémoire se développe progressivement chaque fois qu'il n'y a pas suffisamment d'espace pour la population en mémoire.

Les objets du magasin de colonnes In-Memory sont gérés dynamiquement par Automatic In-Memory (AIM). L'option In-Memory automatique est activée par défaut pour votre base de données autonome avec intelligence artificielle.

AIM utilise des statistiques internes pour déterminer la fréquence d'accès aux objets et colonnes In-Memory. Si le magasin de colonnes In-Memory est plein et que d'autres segments plus fréquemment consultés bénéficient de la population du magasin de colonnes In-Memory, le magasin de colonnes In-Memory évite les segments inactifs.

Pour garantir que le jeu de données de travail est toujours alimenté, AIM supprime automatiquement les segments froids ( rarement consultés). Pour plus d'informations, voir Automatisation de la gestion des objets en mémoire.

La taille maximale en mémoire par défaut de votre base de données Autonomous AI Database peut atteindre 50 % de la taille de la mémoire SGA. Toutefois, vous pouvez modifier la taille maximale en mémoire pour votre base de données d'IA autonome :
  • En modifiant le nombre d'ECPU pour votre base de données d'IA autonome.

  • En utilisant la procédure DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE pour modifier la taille maximale en mémoire. Vous pouvez spécifier une valeur comprise entre 0 et 70. La valeur zéro (0) désactive Database In-Memory. Exemple :
    BEGIN
        DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
    END;
    /
    Cet exemple montre comment modifier la taille maximale In-Memory à 60 % de la taille de la mémoire SGA.

Pour plus d'informations, voir ProcédureSET_SGA_PERCENTAGE.

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

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

Désactivation du magasin de colonnes en mémoire

Vous pouvez désactiver le magasin de colonnes en mémoire pour votre base de données d'intelligence artificielle autonome en modifiant la taille maximale en mémoire à 0.

Exemple :

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

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

Pour plus d'informations, voir ProcédureSET_SGA_PERCENTAGE.