Améliorer le rendement des interrogations avec la mémoire cache de table externe

Sur une base de données d'IA autonome sur une infrastructure Exadata dédiée, vous pouvez utiliser la mémoire cache de table externe pour mettre en mémoire cache les données des tables externes de votre base de données.

Le cache de tables externes est créé en tant qu'objet de schéma dans votre base de données, qui dispose d'un espace physique similaire à la façon dont les tables et les index sont stockés dans des fichiers de données. Lorsque vous créez un cache de table externe, une nouvelle table est créée dans votre schéma. Les limites de quota d'espace définies pour votre schéma s'appliquent également au cache de table externe.

À propos de la mémoire cache de table externe dans la base de données d'intelligence artificielle autonome

Une mémoire cache de table externe est une zone de stockage dans votre base de données Autonomous AI Database qui stocke les données d'une table externe.

Les données externes ne sont pas gérées par la base de données. Toutefois, vous pouvez utiliser les tables externes pour interroger les données en dehors de la base. Les interrogations sur les tables externes ne seront pas aussi rapides que les interrogations sur les tables de base de données, car chaque fois que vous accédez aux données, elles doivent être extraites des fichiers externes stockés dans le magasin d'objets.

La fonction de mise en cache des tables externes vous permet de mettre en cache les données fréquemment consultées à partir de tables externes dans votre base de données d'IA autonome, sans avoir à modifier vos applications qui accèdent aux données, ce qui permet un accès plus rapide aux tables externes.

Voici quelques-uns des avantages de l'utilisation du cache de tables externes :

Vous pouvez créer une mémoire cache de table externe pour les tables partitionnées et non partitionnées créées dans les types de fichier suivants :

Pour plus d'informations, voir Interroger les données externes.

Conditions requises

Répertorie les préalables à la création de la mémoire cache de table externe.

Limitations

Répertorie les notes et restrictions importantes concernant l'utilisation de la mémoire cache de table externe dans une base de données d'intelligence artificielle autonome.

Créer une mémoire cache de table externe

Exécutez DBMS_EXT_TABLE_CACHE.CREATE_CACHE pour créer une mémoire cache de table externe.

Lorsque le cache est créé, il est initialement vide et activé pour l'alimentation. La taille du cache augmente chaque fois qu'un fichier est ajouté, en fonction des limites de quota d'espace définies pour le schéma, jusqu'à ce qu'il atteigne les limites affectées. Pour plus d'informations, voir Définir les préférences de dimensionnement facultatives pour la mémoire cache de table externe.

  1. Utilisez DBMS_EXT_TABLE_CACHE.CREATE_CACHE pour créer la mémoire cache de table externe pour votre schéma. Par exemple :

     BEGIN
         DBMS_EXT_TABLE_CACHE.CREATE_CACHE (
           owner          => 'SALES',
           table_name     => 'STORE_SALES',
           partition_type => 'PATH');
     END;
     /
    

    Cela crée une mémoire cache pour la table STORE_SALES dans le schéma SALES. STORE_SALES est une table externe pointant vers des données stockées dans le magasin d'objets.

    Le paramètre owner spécifie le nom du schéma. Cet exemple crée une mémoire cache de table externe pour l'utilisateur SALES.

    Le paramètre partition_type spécifie la méthode de partitionnement à utiliser pour la mémoire cache de table externe. Cet exemple partitionne la mémoire cache à l'aide de la colonne FILE$PATH. FILE$PATH est une colonne invisible qui spécifie le texte du chemin d'accès au fichier jusqu'au début du nom de l'objet.

    Pour plus d'informations, voir Colonnes de métadonnées de table externe et Procédure CREATE_CACHE.

  2. Lorsque vous créez un cache de table externe pour la première fois, ses métadonnées sont stockées dans le dictionnaire de données, mais aucun espace n'est alloué aux données du cache. Vous pouvez interroger la vue USER_EXTERNAL_TAB_CACHES pour vérifier la création de la mémoire cache.

     SELECT external_table_name, cached, disabled
       FROM user_external_tab_caches;
    

    Pour plus d'informations, voir Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

    Utilisez la procédure DBMS_EXT_TABLE_CACHE.VALIDATE pour valider une mémoire cache de table externe. Une erreur est signalée si la table externe référencée est introuvable dans la base de données.

    Par exemple :

     BEGIN
       DBMS_EXT_TABLE_CACHE.VALIDATE (
         owner         => 'SALES',
         table_name    => 'STORE_SALES',
         raise_errors  => TRUE);
     END;
     /
    

    Pour plus d'informations, voir Procédure VALIDATE.

Alimenter les fichiers dans la mémoire cache de table externe

Affiche des exemples d'alimentation de fichiers dans la mémoire cache de table externe.

Après avoir créé un cache, vous pouvez alimenter les fichiers dans le cache. L'alimentation des fichiers charge le contenu des fichiers de table externe indiqués dans le cache. Vous pouvez choisir d'alimenter tous les fichiers à partir d'une table, d'un pourcentage spécifique de la table ou de spécifier une condition de filtre pour limiter les fichiers à alimenter. Par exemple, vous pouvez filtrer les fichiers en fonction de leur nom ou d'un intervalle de dates.

Selon le quota d'espace affecté au schéma, Oracle tente d'alimenter les fichiers dans la mémoire cache. Si la limite de quota affectée est atteinte, Oracle arrête l'alimentation des fichiers, sauf si l'espace requis est alloué.

La mémoire cache de la table externe ne s'actualise pas automatiquement. Pour mettre à jour la mémoire cache lorsqu'un fichier du magasin d'objets est modifié, vous devez réalimenter le fichier.

Lorsqu'un fichier est supprimé du magasin d'objets, les données mises en cache correspondantes deviennent immédiatement non valides et ne peuvent pas être extraites.

Ajouter une table à la mémoire cache de table externe

Utilisez DBMS_EXT_TABLE_CACHE.ADD_TABLE pour alimenter une table entière ou un certain pourcentage de la table externe dans la mémoire cache.

Exemples

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES',
    table_name    => 'STORE_SALES');
END;
/

Cet exemple tente d'alimenter la table STORE_SALES dans la mémoire cache, en ignorant tous les fichiers existants qui ont déjà été alimentés.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES',
    table_name    => 'STORE_SALES',
    percent_files => 80);
END;
/

Cet exemple tente d'alimenter 80 % de la table STORE_SALES dans la mémoire cache, en ignorant tous les fichiers existants qui ont déjà été alimentés.

Le paramètre percent_files est facultatif. Si vous ne spécifiez pas ce paramètre, toute la table est alimentée dans la mémoire cache.

Pour plus d'informations, voir Procédure ADD_TABLE.

Ajouter des fichiers à la mémoire cache de table externe

Vous pouvez utiliser les procédures suivantes pour ajouter un ou plusieurs fichiers au cache de table externe :

Exemples

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_FILE pour alimenter un seul fichier dans la mémoire cache de table externe. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_FILE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

Cet exemple charge les données du fichier salesdata.parquet dans la mémoire cache.

Cet exemple ignore l'alimentation du fichier dans le cache si le fichier spécifié existe dans le cache et n'a pas été modifié depuis la dernière mise en cache du fichier.

Pour plus d'informations, voir Procédure ADD_FILE.

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE pour alimenter un ou plusieurs fichiers dans la mémoire cache de la table externe. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

Cet exemple charge les données des fichiers salesdata.parquet et salesdata1.parquet dans la mémoire cache, en ignorant tous les fichiers existants qui ont déjà été alimentés.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data2.parquet"]',
    esc_char     => '#',
    force        => TRUE);
END;
/

Cet exemple charge les fichiers sales_data1.parquet et sales_data2.parquet dans la mémoire cache.

Dans cet exemple, le caractère '#' est défini en tant que caractère d'échappement. Le caractère '_' suivant '#' est traité comme un trait de soulignement littéral, et non comme un caractère générique correspondant à un seul caractère.

Pour plus d'informations, voir Procédure ADD_BY_LIKE.

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES pour alimenter un ou plusieurs fichiers en fonction de la date de dernière modification dans la mémoire cache de la table externe. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    since        => INTERVAL '7' DAY,
    max_files    => 5,
    force        => TRUE);
END;
/

Le paramètre since spécifie l'intervalle de temps; seuls les fichiers modifiés au cours des sept (7) derniers jours peuvent être alimentés dans la mémoire cache.

Le paramètre max_files limite le nombre de fichiers pouvant être alimentés dans la mémoire cache. Cet exemple ne charge que cinq (5) fichiers.

Le paramètre force force le remplacement des fichiers spécifiés dans la mémoire cache même si les fichiers n'ont pas été modifiés.

Pour plus d'informations, voir Procédure ADD_LATEST_FILES.

Interrogez les vues suivantes du dictionnaire de données pour répertorier les fichiers mis en cache dans le cache de tables externes :

Supprimer des fichiers de la mémoire cache de table externe

Affiche des exemples pour supprimer des fichiers de la mémoire cache de table externe.

Vous pouvez supprimer tous les fichiers du cache ou spécifier des conditions de filtre pour supprimer un ou plusieurs fichiers du cache. Par exemple, vous pouvez filtrer les fichiers par leur nom ou en fonction d'un intervalle de temps spécifique.

Effacer la mémoire cache de table externe

Utilisez DBMS_EXT_TABLE_CACHE.CLEAR pour supprimer tous les fichiers de la mémoire cache de table externe. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.CLEAR (
    owner         => 'SALES',
    table_name    => 'STORE_SALES');
END;
/

Cet exemple supprime tous les fichiers de la mémoire cache STORE_SALES et libère tout l'espace utilisé par les fichiers supprimés.

Pour plus d'informations, voir Procédure de nettoyage.

Supprimer des fichiers de la mémoire cache de table externe

Vous pouvez utiliser les procédures suivantes pour supprimer un ou plusieurs fichiers du cache de tables externes :

Exemples

Utilisez DBMS_EXT_TABLE_CACHE.DROP_FILE pour supprimer un fichier de la mémoire cache de table externe. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_FILE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

Cet exemple supprime le fichier salesdata.parquet de la mémoire cache et libère tout l'espace utilisé par le fichier supprimé.

Pour plus d'informations, voir Procédure DROP_FILE.

Utilisez DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE pour supprimer un ou plusieurs fichiers en fonction du paramètre path_filters. Par exemple :

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

Cet exemple supprime les fichiers salesdata.parquet et salesdata1.parquet de la mémoire cache et libère tout l'espace utilisé par les fichiers supprimés.

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet"]'
);
END;
/

Cet exemple supprime les fichiers sales#_data1 et sales#_data2 de la mémoire cache et libère tout l'espace utilisé par les fichiers supprimés.

Dans cet exemple, le caractère '#' est défini en tant que caractère d'échappement. Le caractère '_' suivant '#' est traité comme un trait de soulignement littéral, et non comme un caractère générique correspondant à un seul caractère.

Pour plus d'informations, voir Procédure DROP_BY_LIKE.

Utilisez DBMS_EXT_TABLE_CACHE.RETIRE_FILES pour supprimer un ou plusieurs fichiers en fonction de l'intervalle spécifié. Par exemple :

BEGIN
 DBMS_EXT_TABLE_CACHE.RETIRE_FILES (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    before       => INTERVAL '30' DAY);
END;
/

Cet exemple supprime les fichiers qui datent de plus de trente (30) jours du cache et libère tout l'espace utilisé par les fichiers supprimés.

Pour plus d'informations, voir Procédure RETIRE_FILES.

Les exemples ci-dessus suppriment un ou plusieurs fichiers du cache tout en conservant le cache. Vous pouvez charger à nouveau les fichiers dans le cache si nécessaire. Pour plus d'informations, voir Alimenter les fichiers dans la mémoire cache de table externe.

Désactiver et activer la mémoire cache de table externe

Affiche des exemples pour désactiver et activer la mémoire cache de table externe.

Exécutez DBMS_EXT_TABLE_CACHE.DISABLE pour désactiver la mémoire cache de table externe de la base de données. La désactivation d'une mémoire cache ne supprime pas les données de la mémoire cache; elle est marquée DISABLED et l'optimiseur ne peut pas utiliser la mémoire cache pour les réécritures d'interrogation.

Exemples

BEGIN
    DBMS_EXT_TABLE_CACHE.DISABLE (
      owner          => 'SALES',
      table_name     => 'STORE_SALES');
END;
/

Cet exemple désactive la mémoire cache STORE_SALES.

Pour plus d'informations, voir Procédure DISABLE.

Après avoir désactivé une mémoire cache de table externe, utilisez DBMS_EXT_TABLE_CACHE.ENABLE pour activer la mémoire cache.

BEGIN
  DBMS_EXT_TABLE_CACHE.ENABLE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES'
 );
END;
/

Cet exemple active la mémoire cache STORE_SALES.

Pour plus d'informations, voir Procédure ENABLE.

Supprimer la mémoire cache de table externe

Affiche un exemple de suppression de la mémoire cache de table externe.

Exécutez DBMS_EXT_TABLE_CACHE.DROP_CACHE pour supprimer une mémoire cache de table externe. La procédure DBMS_EXT_TABLE_CACHE.DROP_CACHE supprime la mémoire cache de table externe spécifiée de la base de données et libère l'espace de stockage associé à la mémoire cache.

Exemple

BEGIN
    DBMS_EXT_TABLE_CACHE.DROP_CACHE (
      owner          => 'SALES',
      table_name     => 'STORE_SALES');
END;
/

Cet exemple supprime la mémoire cache STORE_SALES du schéma SALES.

La suppression d'un cache supprime ses métadonnées du dictionnaire de données et supprime toutes ses données mises en cache.

Pour plus d'informations, voir Procédure DROP_CACHE.

Interrogez la vue USER_EXTERNAL_TAB_CACHES pour vérifier que la mémoire cache a été supprimée. Par exemple :

SELECT external_table_name, cached
  FROM user_external_tab_caches;

Pour plus d'informations, voir Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

Voir les informations sur la mémoire cache de table externe

Autonomous AI Database fournit des vues qui vous permettent de surveiller la mémoire cache de table externe.

Voir Description
Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES Fournit des informations sur tous les caches de tables externes de la base de données ou sur les caches de tables externes d'un utilisateur.
ALL_EXTERNAL_TAB_CACHE_LOCATIONS Fournit des informations sur les fichiers du stockage en nuage accessibles à l'utilisateur courant et appartenant à des tables externes mises en cache.
USER_EXTERNAL_TAB_CACHE_LOCATIONS; Fournit des informations sur les fichiers du stockage en nuage appartenant à l'utilisateur courant et appartenant à des tables externes mises en cache. Cette vue n'affiche pas la colonne OWNER.

Définir les préférences de dimensionnement facultatives pour la mémoire cache de table externe

Vous pouvez utiliser la procédure DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY pour définir les préférences de dimensionnement et les limites de quota d'espace dans la mémoire cache de table externe.

Par défaut, la mémoire cache de table externe est désactivée pour un utilisateur. Pour activer et créer la mémoire cache de table externe, utilisez la procédure DBMS_EXT_TABLE_CACHE.CREATE_CACHE. Le cache est créé dans votre schéma par défaut et hérite des limites de quota d'espace définies pour votre schéma. Toutefois, vous pouvez également utiliser la procédure DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY pour définir des quotas d'espace pour la mémoire cache de table externe. Vous utilisez les paramètres PROPERTY_NAME et PROPERTY_VALUE de la procédure DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY pour définir les limites de quota d'espace.

Le paramètre PROPERTY_NAME accepte les valeurs MAX_CACHE_SIZE et MAX_CACHE_PERCENT. La propriété MAX_CACHE_SIZE spécifie la taille totale de la mémoire cache externe en octets. La propriété MAX_CACHE_PERCENT spécifie la taille totale de la mémoire cache externe en tant que pourcentage du quota de l'utilisateur spécifié.

Avant de définir les propriétés de la taille du cache, notez l'ordre de priorité suivant :

Exemples

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    property_name  => 'MAX_CACHE_PERCENT',
    property_value => 50,
    owner          => 'SALES');
END;
/

Cet exemple règle la préférence de mise en mémoire cache à MAX_CACHE_PERCENT pour le schéma SALES.

La valeur property_value est de 50 %, ce qui indique que le quota d'espace de mémoire cache pour le schéma SALES est un maximum de 50 % du quota d'espace total défini pour SALES.

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    owner          => 'SALES',
    property_name  => 'MAX_CACHE_SIZE',
    property_value => 5368709120);
END;
/

Cet exemple règle la préférence de mise en mémoire cache à MAX_CACHE_SIZE pour le schéma SALES.

property_value est 5368709120, qui spécifie que la taille maximale de la mémoire cache pour le schéma SALES est de 5 Go au maximum.

Pour plus d'informations, voir Procédure SET_USER_PROPERTY et Procédure CREATE_CACHE.

Utilisez DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY pour extraire les propriétés de taille de cache.

Exemple

SET SERVEROUTPUT ON
    DECLARE
    max_cache_sz NUMBER,
    BEGIN
    max_cache_sz := DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY (
        property_name       => 'MAX_CACHE_SIZE',
        owner               => 'SALES');
END;
/

Pour plus d'informations, voir Fonction GET_USER_PROPERTY.

Colonnes de métadonnées de table externe

Les métadonnées de la table externe vous aident à déterminer d'où proviennent les données lorsque vous effectuez une interrogation.

Les tables externes que vous créez avec DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE ou DBMS_CLOUD.CREATE_HYBRID_PART_TABLE incluent deux colonnes invisibles file$path et file$name. Ces colonnes permettent d'identifier le fichier d'où provient un enregistrement.

Exemple

SELECT genre_id, name, file\$name, file\$path FROM ext_genre
     WHERE rownum <= 2;
genre_id      name        file\$name     file\$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

Voir Colonnes invisibles pour plus d'informations sur les colonnes invisibles.

Rubriques connexes

Ensemble DBMS_EXT_CACHE