Utiliser la mémoire cache de table externe pour améliorer les performances des tables externes

La mémoire cache de table externe dans Oracle Autonomous AI Database vous permet de mettre en mémoire cache les données fréquemment consultées à partir de tables externes de votre base de données.

Note

La mémoire cache de table externe n'est prise en charge que pour Oracle AI Database 26ai.

À 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 mémoire cache de table externe vous permet de stocker localement les données externes fréquemment consultées. Lorsque vous utilisez le cache, les interrogations sur des tables externes peuvent extraire des données directement à partir de la base de données de l'IA autonome, ce qui les accélère considérablement. Vous n'avez pas besoin de modifier les instructions SQL ou les flux de travail existants pour bénéficier d'un accès plus rapide, car ce mécanisme de mise en cache est totalement transparent pour les applications. Vous pouvez créer une mémoire cache de table externe pour les tables externes partitionnées et non partitionnées créées sur les tables Parquet, ORC, AVRO, CSV et Iceberg.

Voici quelques-uns des avantages de l'utilisation du cache de tables externes :
  • Performance améliorée pour l'analyse : Les interrogations sont plusieurs fois plus rapides pour les données externes fréquemment consultées, ce qui est idéal pour les tableaux de bord, les rapports et les outils d'analyse qui accèdent régulièrement aux mêmes données.

  • 100 % transparent : Le mécanisme de mise en mémoire cache est entièrement transparent. Les applications peuvent bénéficier d'une vitesse améliorée sans nécessiter de modification de leurs interrogations, tableaux de bord ou applications.

  • Coût réduit du nuage : Dans une application multinuage, la mise en mémoire cache réduit le besoin d'extractions répétées de données externes à partir d'un stockage distant, réduisant ainsi les frais de trafic sortant associés à l'accès aux données dans les régions ou les nuages.

  • Contrôle de mise en mémoire cache flexible et détaillé : Vous pouvez mettre en mémoire cache tous les fichiers, un pourcentage de fichiers ou uniquement les données les plus récemment mises à jour. Vous pouvez contrôler les données mises en cache, la taille du cache et les limites de stockage pour les caches de table externes.

Les caches de table externes de votre base de données peuvent être gérés automatiquement ou au moyen de paramètres basés sur des stratégies. Grâce à la gestion du cache basée sur des stratégies, vous pouvez définir des stratégies simples pour alimenter, actualiser et supprimer des fichiers du cache, ce qui vous permet de contrôler avec précision le contenu et la maintenance du cache.

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

Démarrage rapide avec les caches de table externes

Fournit des exemples pour vous aider à commencer à créer et à alimenter des caches de table externe.

Créez un cache de table externe basé sur une politique pour le schéma SALES.

Lorsque vous créez un cache, 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.

Utilisez DBMS_EXT_TABLE_CACHE.CREATE_CACHE pour créer la mémoire cache de table externe pour votre schéma. 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.

partition_type contrôle le fractionnement de la mémoire cache. Avec 'PATH', la mémoire cache est partitionnée par le chemin d'accès au dossier de chaque fichier source. FILE$PATH est une colonne masquée qui stocke le chemin d'accès au dossier (tout ce qui précède le nom du fichier).

Par exemple, si un fichier est …/n/<ns>/b/<bucket>/o/sales/2024/09/data1.parquet, FILE$PATH = 'sales/2024/09/' (le dossier).

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. Exemple :
SELECT external_table_name, cached, disabled 
  FROM 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. Exemple :
BEGIN
  DBMS_EXT_TABLE_CACHE.VALIDATE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES',
    raise_errors  => TRUE);
END;
/

Exécutez DBMS_EXT_TABLE_CACHE.ADD_TABLE pour alimenter une table entière dans la mémoire cache. Exemple :

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.

Créer des caches de tables externes gérés automatiquement

Par défaut, la mise en mémoire cache automatique est désactivée. Les mémoires caches AUTO sont automatiquement créées lorsque vous activez la mise en mémoire cache automatique.

Exécutez DBMS_CACHE.SET_USER_PROPERTY pour activer la mise en mémoire cache automatique de la table externe pour le schéma HR. Exemple :
BEGIN
 DBMS_CACHE.SET_USER_PROPERTY (
 property_name      => 'max_cache_size', 
 property_value_num => 10737418240); 
END; 
/

Cet exemple active la mise en mémoire cache automatique pour le schéma HR et règle le paramètre MAX_CACHE_SIZE à 10737418240 octets, en spécifiant une allocation maximale de mémoire cache de 10 Go pour les tables externes du schéma HR. Il crée également les caches requis pour les tables externes et les alimente.

Exemple pour activer la mise en cache automatique pour tous les utilisateurs de base de données :
BEGIN
 DBMS_CACHE.SET_GLOBAL_PROPERTY (
 property_name       => 'max_cache_percent',
 property_value_num  => 20);
END; 
/

Utilisez la propriété globale MAX_CACHE_PERCENT pour définir la limite de mémoire cache par défaut pour tous les utilisateurs. Lorsque vous réglez MAX_CACHE_PERCENT à 20, la mise en mémoire cache automatique des tables externes peut utiliser jusqu'à 20 % du quota d'espace-table affecté par chaque utilisateur (par exemple, un utilisateur avec un quota de 100 Go peut mettre en mémoire cache jusqu'à 20 Go, un utilisateur avec un quota de 10 Go jusqu'à 2 Go). Ce paramètre global s'applique uniquement à la mise en cache automatique et est défini par utilisateur, et non par limite totale pour tous les utilisateurs. Vous pouvez remplacer cette valeur par défaut pour des utilisateurs individuels en exécutant la procédure DBMS_CACHE.SET_USER_PROPERTY.

Exécutez l'interrogation suivante pour vérifier que les caches sont créés et activés :
SELECT external_table_name, cached, auto
  FROM all_external_tab_caches;

Les mémoires caches AUTO sont actualisées automatiquement selon un programme régulier. Facultativement, vous pouvez également utiliser la procédure DBMS_CACHE.REFRESH pour effectuer une actualisation sur demande pour tous les caches d'un utilisateur spécifié. Exemple :
BEGIN
    DBMS_CACHE.REFRESH (      
      owner          => 'HR',
      refresh_type   => 'ALL');                                                                 
END;                                                                 
/

Cet exemple met à jour les mémoires caches existantes et crée de nouvelles mémoires caches de table externe pour le schéma HR, si nécessaire. La propriété refresh_type spécifie la portée à laquelle l'actualisation est effectuée.

Sélectionner vos préférences de mise en mémoire cache

Décrit comment choisir la préférence de mise en mémoire cache appropriée, notamment le comportement de la mémoire cache et l'affectation de taille pour les tables externes.

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.

La gestion du cache de tables externes peut être de deux types :
  • Gestion du cache basée sur des stratégies

    • Vous définissez explicitement la façon dont les caches sont créés, alimentés, actualisés et retirés.

    • Offre un contrôle détaillé du contenu et du cycle de vie de la mémoire cache.

    • Convient lorsque le comportement de mise en cache prévisible ou personnalisé est requis.

  • Gestion automatique de la mémoire cache

    • La base de données crée, alimente, actualise et supprime automatiquement les caches.

    • Les actions dépendent des modèles d'interrogation de table externe et de l'utilisation de la charge globale.

    • Idéal pour les environnements où le comportement de mise en cache doit s'adapter dynamiquement sans intervention manuelle.

Préalables à la création de la mémoire cache de table externe

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

  • Vous ne pouvez créer un cache de table externe que dans votre propre schéma et pour les tables externes que vous possédez.

  • Un quota d'espace approprié doit être affecté à votre schéma pour garantir une capacité de stockage suffisante pour les données de la mémoire cache.

  • Vous devez disposer de données d'identification pour accéder aux fichiers de table externe stockés dans le magasin d'objets. Vous n'avez pas besoin de créer des données d'identification si vous activez les données d'identification du principal de ressource pour accéder au service de stockage d'objets pour Oracle Cloud Infrastructure.

Utiliser la mise en mémoire cache basée sur des politiques pour les tables externes

Décrit comment utiliser la mise en cache basée sur des politiques pour les tables externes dans Autonomous AI Database.

La mise en mémoire cache basée sur des stratégies vous permet de contrôler explicitement comment les données externes sont mises en mémoire cache, actualisées et gérées dans la base de données. Dans cette approche, vous définissez des politiques de mise en cache et gérez l'ensemble du cycle de vie du cache à l'aide des procédures PL/SQL disponibles dans l'ensemble DBMS_EXT_TABLE_CACHE. Ces procédures vous permettent d'effectuer explicitement diverses opérations de cycle de vie du cache, telles que la création et l'alimentation de caches, la suppression de fichiers du cache et l'activation ou la désactivation des caches.

Cette approche vous donne un contrôle détaillé du comportement du cache. Vous pouvez indiquer les fichiers de table externe ou le pourcentage de données de la table externe à mettre en mémoire cache, ce qui garantit une utilisation optimale de l'espace mémoire cache en fonction des besoins de la charge globale. Les procédures telles que ADD_BY_LIKE et ADD_LATEST_FILES vous permettent de filtrer et d'alimenter les fichiers dans la mémoire cache en fonction de plusieurs paramètres, tels que les modèles de nom de fichier, les heures de modification ou les critères de fraîcheur des données. De même, vous pouvez utiliser des procédures telles que CLEAR, RETIRE_FILES ou DROP_BY_LIKE pour supprimer des fichiers de la mémoire cache.

Comme les caches basés sur des stratégies ne sont pas gérés par un algorithme d'éviction automatique, la base de données ne les supprime pas automatiquement sous la pression de l'espace. Si l'espace du cache devient indisponible, les nouveaux fichiers risquent de ne pas être alimentés tant que l'espace supplémentaire n'est pas libéré. Cette approche offre une plus grande flexibilité et est idéale pour les charges de travail où vous avez besoin de plus de contrôle sur le contenu du cache.

Pour plus d'informations, voir Ensemble DBMS_EXT_TABLE_CACHE.

L'organigramme suivant décrit les étapes de gestion des caches basés sur des politiques à l'aide de l'ensemble DBMS_EXT_TABLE_CACHE. Il comprend des étapes clés telles que la création, l'alimentation et la suppression de la mémoire cache.


Description de adb_external_table_cache.png :
Description de l'illustration adb_external_table_cache.png

Rubriques

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

Décrit comment alimenter la mémoire cache basée sur une politique créée précédemment.

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.

Note

  • 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édureADD_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 :
  • ADD_FILE : Pour ajouter un seul fichier dans la mémoire cache.

  • ADD_BY_LIKE : Pour ajouter un ou plusieurs fichiers spécifiés en fonction des filtres de chemin spécifiés.

  • ADD_LATEST_FILES : Pour ajouter un ou plusieurs fichiers en fonction de l'intervalle de temps spécifié.

Exemples

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_FILE pour alimenter un seul fichier dans la mémoire cache de table externe. 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édureADD_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. 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/sales%.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/customer%.parquet"]'
);
END;
/

Cet exemple alimente tous les fichiers avec des noms commençant par sales ou customer, tout en excluant les fichiers déjà 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édureADD_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. 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édureADD_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. 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 :
  • DROP_FILE : Pour supprimer un seul fichier de la mémoire cache.

  • DROP_BY_LIKE : Pour supprimer un ou plusieurs fichiers de la mémoire cache en fonction des filtres de chemin spécifiés.

  • RETIRE_FILES : Pour supprimer un ou plusieurs fichiers de la mémoire cache en fonction de l'intervalle spécifié.

Exemples

Utilisez DBMS_EXT_TABLE_CACHE.DROP_FILE pour supprimer un fichier de la mémoire cache de table externe. 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édureDROP_FILE.

Utilisez DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE pour supprimer un ou plusieurs fichiers en fonction du paramètre path_filters. 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#_data2.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édureDROP_BY_LIKE.

Utilisez DBMS_EXT_TABLE_CACHE.RETIRE_FILES pour supprimer un ou plusieurs fichiers en fonction de l'intervalle spécifié. 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édureRETIRE_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.

Exemple

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.

Exemple :
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édureDROP_CACHE.

Interrogez la vue USER_EXTERNAL_TAB_CACHES pour vérifier que la mémoire cache a été supprimée. 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.

Définir des préférences de dimensionnement facultatives pour les caches basés sur des politiques

Décrit comment définir les préférences de dimensionnement pour les caches de table externe basés sur des politiques dans la base de données Autonomous AI Database.

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é.

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 mémoire 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.

Notez l'ordre de priorité suivant pour définir les propriétés de taille de cache :

  • Lorsque MAX_CACHE_SIZE, MAX_CACHE_PERCENT et le quota d'espace sont définis, MAX_CACHE_PERCENT a préséance sur MAX_CACHE_SIZE.

  • Lorsque seul MAX_CACHE_SIZE est défini et que MAX_CACHE_PERCENT ou le quota d'espace n'est pas défini, MAX_CACHE_SIZE a préséance.

  • Lorsque seul le quota d'espace est défini et que MAX_CACHE_SIZE et MAX_CACHE_PERCENT ne sont pas définis, le quota de taille de mémoire cache est par défaut égal à 10 % du quota de schéma total.

  • Lorsque MAX_CACHE_SIZE, MAX_CACHE_PERCENT ou le quota d'espace n'est pas défini, le quota d'espace de mémoire cache prend par défaut la valeur UNLIMITED.

Note

Pour surveiller l'utilisation de l'espace de mémoire cache, interrogez la colonne CACHE_CUR_SIZE dans les vues ALL_EXTERNAL_TAB_CACHES. Pour plus d'informations, voir Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

Utiliser la mise en mémoire cache automatique pour la table externe

Décrit comment utiliser la mise en cache automatique pour les tables externes dans Autonomous AI Database.

Lorsque vous activez la mise en mémoire cache automatique pour votre base de données, celle-ci gère automatiquement l'ensemble du cycle de vie de la mémoire cache, y compris la création, l'alimentation, l'actualisation et la suppression, sans que vous ayez à intervenir. Oracle utilise des mécanismes internes pour déterminer quelles tables externes peuvent bénéficier de la mise en mémoire cache, quand actualiser les caches et quand les supprimer en fonction des modèles d'utilisation et de l'espace de stockage disponible. Cette approche réduit les frais généraux liés à la gestion du cache, car l'utilisation du cache est surveillée en continu, ce qui garantit que les données de table externe fréquemment consultées restent disponibles dans le cache afin d'améliorer les temps de réponse aux interrogations.

Par défaut, la mise en mémoire cache automatique n'est pas activée dans la base de données. Pour l'activer, vous devez régler la taille de la mémoire cache à une valeur différente de zéro à l'aide de procédures telles que DBMS_CACHE.SET_USER_PROPERTY fournies dans l'ensemble DBMS_CACHE. Vous pouvez configurer la mise en cache automatique pour un utilisateur spécifique ou en tant que paramètre par défaut pour tous les utilisateurs de base de données, selon vos besoins.

Lorsque la mise en mémoire cache automatique des tables externes est activée, Oracle crée des mémoires caches de tables externes marquées AUTO et alimente toutes les données correspondantes d'une table externe dans sa mémoire cache si le quota le permet. Les mémoires caches AUTO sont actualisées automatiquement selon un programme régulier. Toutefois, vous pouvez également utiliser des procédures DBMS_CACHE.REFRESH ou DBMS_CACHE.CLEAR pour actualiser ou supprimer vos caches, respectivement.

Oracle gère les mémoires caches AUTO à l'aide d'un algorithme d'expulsion similaire à l'algorithme Least Recent Used (LRU). En cas de sous-pression d'espace, les caches qui ont fait l'objet d'un accès le moins récent sont automatiquement supprimés au cours du cycle d'actualisation pour libérer l'espace de stockage.

Voir ce qui suit pour plus d'informations :

Rubriques

Activer la mise en mémoire cache automatique pour les tables externes

Décrit comment configurer les propriétés de mise en cache automatique.

Par défaut, la mise en mémoire cache automatique est désactivée. Vous pouvez activer la mise en mémoire cache automatique pour vos tables externes, globalement pour tous les utilisateurs de la base de données ou pour un utilisateur spécifique. Une fois la mise en cache automatique activée, la base de données crée automatiquement des mises en cache de tables externes. Tous les caches nouvellement créés sont marqués comme AUTO. Les caches existants continuent de suivre les paramètres de gestion du cache basés sur des stratégies.

Vous utilisez DBMS_CACHE.SET_GLOBAL_PROPERTY ou DBMS_CACHE.SET_USER_PROPERTY pour définir les propriétés de mise en mémoire cache AUTO, notamment les propriétés permettant d'activer la mise en mémoire cache automatique globalement ou pour un utilisateur spécifié, respectivement. Les préférences de mise en cache au niveau de l'utilisateur ont préséance sur les préférences de mise en cache globales. Utilisez les paramètres PROPERTY_NAME et PROPERTY_VALUE de ces procédures pour définir les limites de quota d'espace pour les mémoires caches de table externes.

Selon le quota d'espace spécifié, Oracle crée les caches et tente d'alimenter l'ensemble des données de la table externe dans le cache. Le processus d'alimentation échoue si la taille du cache n'est pas suffisante pour prendre en charge l'ensemble des données de la table externe.

  1. Utilisez DBMS_CACHE.SET_GLOBAL_PROPERTY pour activer la mise en mémoire cache automatique pour tous les utilisateurs de base de données.

    Exemples :

    Exemple pour activer la mise en cache automatique pour tous les utilisateurs de base de données :

    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'MAX_CACHE_PERCENT', 
        property_value_num  => 20);                                                                
    END;                                                                 
    /

    Cet exemple montre comment régler la préférence de mise en mémoire cache à MAX_CACHE_PERCENT comme valeur par défaut pour tous les utilisateurs de base de données et régler le quota de mémoire cache de table externe à 20% au maximum du quota d'utilisateurs affecté. Vous pouvez remplacer ce paramètre par défaut pour des utilisateurs individuels à l'aide de la procédure DBMS_CACHE.SET_USER_PROPERTY.

    Lorsque vous activez la mise en mémoire cache automatique, vous pouvez éventuellement spécifier la portée de l'actualisation de la mémoire cache, c'est-à-dire les mémoires caches pouvant être actualisées au cours de chaque cycle d'actualisation, et définir la fenêtre de temps autorisée pour terminer le processus d'actualisation.

    Exemple pour définir le mode d'actualisation automatique pour tous les utilisateurs de base de données :
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'AUTO_REFRESH_MODE', 
        property_value_str  => 'NEW');                                                              
    END;                                                                 
    /

    Indique la portée à laquelle les caches AUTO sont actualisés lors de chaque cycle d'actualisation. La valeur property_value_str peut être remplacée au niveau du schéma à l'aide de la procédure DBMS_CACHE.SET_USER_PROPERTY.

    Exemple pour définir la fenêtre de temps maximale autorisée pour terminer l'actualisation :
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'MAX_REFRESH_WINDOW', 
        property_value_num  => 20);                                                              
    END;                                                                 
    /

    Cet exemple règle MAX_REFRESH_WINDOW à vingt (20) secondes.

    Pour plus d'informations, voir ProcédureSET_GLOBAL_PROPERTY.

    Note

    La propriété MAX_REFRESH_WINDOW ne peut être définie qu'au niveau de la base de données. Cette propriété ne peut pas être définie au niveau du schéma.

    Exécutez DBMS_CACHE.GET_GLOBAL_PROPERTY pour extraire les préférences de mise en mémoire cache automatique par défaut pour les tables externes. Exemple :

    SET SERVEROUTPUT ON;
    DECLARE
       cache_property NUMBER;
    BEGIN
       DBMS_CACHE.GET_GLOBAL_PROPERTY (
          property_name  => 'MAX_CACHE_SIZE',
          property_value => cache_property
       );
     DBMS_OUTPUT.PUT_LINE('MAX_CACHE_SIZE = ' || cache_property);
    END;
    /

    Pour plus d'informations, voir ProcédureGET_GLOBAL_PROPERTY.

  2. Vous utilisez DBMS_CACHE.SET_USER_PROPERTY pour activer la mise en mémoire cache automatique de la table externe pour un utilisateur spécifique. Exemple :
    BEGIN
     DBMS_CACHE.SET_USER_PROPERTY (
            property_name       => 'MAX_CACHE_PERCENT', 
            property_value_num  => 50,
            owner               => 'HR');                                                                
    END;                                                                 
    /

    Cet exemple remplace les préférences de mise en cache globale par les valeurs spécifiées dans DBMS_CACHE.SET_USER_PROPERTY.

    Pour plus d'informations, voir ProcédureSET_USER_PROPERTY.

    Utilisez DBMS_CACHE.GET_USER_PROPERTY pour extraire les préférences de mise en mémoire cache automatique pour les tables externes pour un utilisateur spécifié. Exemple :

    SET SERVEROUTPUT ON;
    DECLARE
       cache_property NUMBER;
    BEGIN
       DBMS_CACHE.GET_USER_PROPERTY (
          property_name  => 'MAX_CACHE_SIZE',
          owner          => 'HR',
          property_value => cache_property
       );
     DBMS_OUTPUT.PUT_LINE('MAX_CACHE_SIZE = ' || cache_property);
    END;
    /

    Pour plus d'informations, voir ProcédureGET_USER_PROPERTY.

Note

Pour surveiller l'utilisation de l'espace de mémoire cache, interrogez la colonne CACHE_CUR_SIZE dans les vues ALL_EXTERNAL_TAB_CACHES. Pour plus d'informations, voir Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

Actualisation des caches de tables externes

La figure présente un exemple d'actualisation des caches AUTO pour le schéma spécifié.

Les mémoires caches AUTO sont actualisées automatiquement selon un programme régulier. Selon le type d'actualisation spécifié, la base de données peut :
  • Ajoutez de nouveaux caches.

  • Supprimez les caches non valides (les caches qui deviennent inaccessibles sont marqués comme non valides et sont supprimés lors du cycle d'actualisation suivant).

  • Mettre à jour ou réalimenter les caches existants.

  • Déposez les caches les moins consultés récemment sous la pression de l'espace.

Vous pouvez également utiliser la procédure DBMS_CACHE.REFRESH pour effectuer une actualisation sur demande pour tous les caches de l'utilisateur HR.

  1. Vous utilisez DBMS_CACHE.REFRESH pour actualiser tous les caches de table externe de l'utilisateur HR. Exemple :
    BEGIN
        DBMS_CACHE.REFRESH (      
          owner          => 'HR',
          refresh_type   => 'ALL');                                                                 
    END;                                                                 
    /

    Cet exemple met à jour les mémoires caches existantes et crée de nouvelles mémoires caches de table externe pour le schéma HR, si nécessaire.

    La propriété refresh_type spécifie la portée à laquelle l'actualisation est effectuée. La propriété peut avoir l'une des valeurs suivantes :
    • ALL : Toutes les mémoires caches AUTO existantes pour le schéma HR sont actualisées et, si nécessaire, de nouvelles mémoires caches sont créées.

    • CURRENT : Seules les mémoires caches existantes sont actualisées, aucune nouvelle mémoire cache n'est ajoutée.

    • NEW : Seules les nouvelles mémoires caches sont créées.

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

Supprimer les caches de table externes

Affiche un exemple pour supprimer des caches AUTO pour le schéma spécifié.

Au cours de chaque cycle d'actualisation, les caches non valides et les caches les moins récents sont supprimés de la base de données. Vous pouvez également utiliser la procédure DBMS_CACHE.CLEAR pour supprimer tous les caches d'un utilisateur spécifié.

  1. Vous utilisez DBMS_CACHE.CLEAR pour supprimer tous les caches de table externe pour le schéma HR. Exemple :
    BEGIN
     DBMS_CACHE.CLEAR (
        owner => 'HR');                                                                
    END;                                                                 
    /

    Cet exemple supprime tous les caches de table externe pour le schéma HR.

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

Surveiller et diagnostiquer la performance de la mémoire cache des tables externes

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.

Ces vues fournissent des informations détaillées sur la façon dont les données mises en cache pour les tables externes sont stockées, consultées et mises à jour dans la base de données. Ces vues vous permettent de surveiller les performances du cache, d'identifier les données obsolètes ou obsolètes et d'analyser l'utilisation de l'espace pour garantir une efficacité optimale des interrogations. En surveillant ces vues, vous pouvez détecter le moment où les caches doivent être actualisés, vérifier que la taille des caches respecte les limites configurées et diagnostiquer les goulots d'étranglement liés à l'accès aux données externes.

Exemples :

L'interrogation suivante fournit des informations sur les caches de tables externes qui sont actifs ou périmés. Vous pouvez ensuite effacer ou supprimer les caches périmés pour libérer de l'espace de stockage si nécessaire :
SELECT table_name, cached, stale, last_refreshed, last_accessed
  FROM all_external_tab_cache_locations
  ORDER BY stale DESC, usage_count DESC;

L'interrogation suivante fournit des informations sur l'inventaire du cache et l'utilisation de l'espace :

SELECT external_table_name, cache_cur_size, cache_max_size, disabled
    FROM user_external_tab_caches;

Cas d'utilisation pour la mise en mémoire cache de table externe

Décrit les scénarios courants dans lesquels la mise en cache des tables externes est bénéfique.

Cas d'utilisation Que mettre en cache Incidence des coûts Incidence sur la performance Notes

BI interactif ou tableaux de bord sur des tables externes

Tables externes ou partitions fréquemment interrogées alimentant des tableaux de bord

Élimine les lectures répétées dans différents nuages ou régions

Conserve les données chaudes locales pour des temps de réponse plus rapides et cohérents et évite les démarrages à froid

C'est le scénario le plus courant

Analyse multinuage (par exemple, Autonomous AI Database sur OCI lisant S3 ou GCS ou Azure)

Jeux de données chauds accessibles à partir de magasins d'objets non OCI

Réduit le trafic sortant entre les nuages et les frais de demande du fournisseur

Supprime les E/S distantes et la latence réseau

Réduire les coûts et la latence

Accès inter-région (même nuage)

Données externes dans une autre région

Évite le trafic sortant inter-régions lors des balayages répétés

Réduit la latence en localisant les lectures

Même logique que le multinuage.

Actualisation de la vue matérialisée sur les données externes

Tables externes sources pour les vues matérialisées

Réduit le trafic sortant répétitif pour les actualisations programmées

Stabilise et accélère le rafraîchissement de la vue matérialisée; réduit le temps de balayage à distance

Idéal pour les agrégats en temps quasi réel

Pipelines de fichiers les plus récents (zone d'atterrissage)

N dernières heures ou derniers jours de fichiers utilisant ADD_LATEST_FILES

 

Les dernières données sont toujours chaudes

 

Données de consultation ou de référence petites mais fréquemment jointes

Petites tables externes utilisées dans les jointures

Empêche la surcharge due à de nombreuses petites demandes

Conserve les données de consultation locales pour les jointures

Les petites données du dictionnaire sont toujours à jour et n'ont pas besoin de gérer des processus ETL complexes

Science des données et ingénierie des caractéristiques

Entraînement ou jeux de fonctions réutilisés dans des tables externes

Moins de lectures à distance pendant le travail itératif

Analyses répétées plus rapides pendant l'expérimentation

Fonctionne bien avec les boucles axées sur les ordinateurs portables

Magasin d'objets saturé ou ralenti

Toute table externe à trafic élevé

Moins de tentatives pour de nombreux utilisateurs

Protège les interrogations à partir de la limitation du stockage et du débit variable

Améliore la prévisibilité du contrat de niveau de service

Iceberg ou grands lacs partitionnés

Partitions chaudes ou instantanés lus fréquemment

Évite les lectures répétées des mêmes bandes de parquet

Localise les pages de données pour les partitions chaudes; temps d'interrogation plus constant

Lien croisé vers la page de configuration d'Iceberg

Exploration ad hoc à grande échelle

Tables externes provisoires qui voient un accès répété

Évite de rembourser la sortie tout en explorant

Rend les requêtes de suivi insatisfaites après la première passe

Bon sur les rampes sans copier les pipelines.