Utiliser le cache de table externe pour améliorer les performances des tables externes

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

Remarque

Le cache de table externe est uniquement pris en charge pour Oracle AI Database 26ai.

A propos du cache de table externe dans la base de données Autonomous AI

Un cache de table externe est une zone de stockage de votre base de données Autonomous AI 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 des données en dehors de la base. Les requêtes sur les tables externes ne seront pas aussi rapides que les requêtes 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 la banque d'objets.

Le cache de table externe vous permet de stocker localement les données externes fréquemment consultées dans votre base de données Autonomous AI, ce qui permet aux requêtes suivantes d'extraire les données directement du cache. Lorsque les données externes sont stockées dans votre base de données, les requêtes sur les tables externes s'exécutent beaucoup plus rapidement que lors de l'extraction de données à partir de tables externes. Ce mécanisme de mise en cache est entièrement transparent pour les applications, ne nécessitant aucune modification des instructions SQL ou des workflows existants.

Vous pouvez créer un 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. Vous pouvez remplir facilement les fichiers nouveaux ou mis à jour dans le cache, et la base de données invalide automatiquement les données des fichiers supprimés ou inaccessibles, ce qui garantit que les requêtes renvoient toujours les données les plus récentes. Si des fichiers externes sont supprimés ou que les informations d'identification de table sont révoquées, les données mises en cache correspondantes sont immédiatement invalidées et deviennent inaccessibles, ce qui garantit l'intégrité et la sécurité des données.

Les caches de table externes de la base de données peuvent être gérés automatiquement ou via des paramètres basés sur une stratégie. Grâce à la gestion du cache basée sur des stratégies, vous pouvez définir des stratégies simples pour remplir, actualiser et retirer des fichiers du cache, ce qui vous permet de contrôler précisément le contenu et la maintenance du cache.

Voici quelques-uns des avantages de l'utilisation du cache de table externe :
  • Performances améliorées pour les analyses : les requêtes sont plusieurs fois plus rapides pour vos 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 cache est entièrement transparent. Les applications peuvent bénéficier d'une vitesse améliorée sans nécessiter de modification de leurs requêtes, tableaux de bord ou applications.

  • Réduction des coûts liés au cloud : dans une application multicloud, la mise en cache réduit la nécessité d'extraire des données externes répétées à partir du stockage distant, réduisant ainsi les frais de sortie de données associés à l'accès aux données entre les régions ou les clouds.

  • Contrôle de mise en cache flexible et détaillé : vous pouvez mettre en 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 en cache, la taille du cache et les limites de stockage pour les caches de table externes.

Pour plus d'informations, reportez-vous à Requête de données externes.

Prérequis pour la création d'un cache de table externe

Répertorie les prérequis pour la création du cache de table externe.

  • Vous devez être connecté en tant qu'utilisateur ADMIN ou disposer du privilège EXECUTE sur les packages DBMS_EXT_TABLE_CACHE et DBMS_CACHE.

  • Vous pouvez uniquement créer un cache de table externe dans votre propre schéma et pour les tables externes dont vous êtes propriétaire.

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

  • Vous devez disposer d'informations d'identification pour accéder aux fichiers de table externes stockés dans la banque d'objets. Vous n'avez pas besoin de créer d'informations d'identification si vous activez les informations d'identification de principal de ressource pour accéder à la banque d'objets Oracle Cloud Infrastructure.

Création et gestion du cache de table externe dans la base de données Autonomous AI

A l'aide du cache de table externe, vous pouvez mettre en cache les données des tables externes de la base.

Le cache de table externe est créé en tant qu'objet de schéma dans la base de données. L'espace physique alloué est semblable à celui des tables et des index stockés dans les fichiers de données. Lorsque vous créez un cache de table externe, une table est créée dans votre schéma. Toutes les limites de quota d'espace définies pour votre schéma s'appliquent également au cache de table externe.

La gestion des caches de table externe peut être automatique ou basée sur une stratégie. Grâce à la gestion automatique du cache, la base de données crée, alimente, actualise et supprime les caches en fonction des modèles de requête de table externe. Grâce à la gestion basée sur des stratégies, vous définissez la façon dont les caches sont créés, remplis, actualisés et mis hors service, ce qui vous donne un contrôle précis sur le contenu et le cycle de vie du cache.

Sujets

Utiliser la mise en cache basée sur une stratégie pour les tables externes

Explique comment utiliser la mise en cache basée sur des stratégies pour les tables externes dans la base de données Autonomous AI.

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

Cette approche permet 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 de cache en fonction des exigences de charge globale. Les procédures telles que ADD_BY_LIKE et ADD_LATEST_FILES vous permettent de filtrer et de remplir les fichiers dans le 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 du cache.

Comme les caches basés sur une stratégie ne sont pas gérés par un algorithme d'expulsion automatique, la base de données ne les supprime pas automatiquement sous la pression de l'espace. Si l'espace cache devient indisponible, les nouveaux fichiers risquent de ne pas pouvoir être remplis 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.

Le diagramme suivant décrit les étapes de gestion des caches basés sur une stratégie à l'aide du package DBMS_EXT_TABLE_CACHE. Il comprend des étapes clés telles que la création, l'alimentation et la suppression du cache.


Description de l'image adb_external_table_cache.png
Description de l'image adb_external_table_cache.png

Sujets

Créer un cache de table externe

Exécutez DBMS_EXT_TABLE_CACHE.CREATE_CACHE pour créer un cache de table externe.

Lorsque la mémoire cache est créée, elle est initialement vide et activée 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, reportez-vous à Définition de préférences de dimensionnement facultatives pour les caches basés sur une stratégie.

  1. Utilisez DBMS_EXT_TABLE_CACHE.CREATE_CACHE pour créer un 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 un cache pour la table STORE_SALES dans le schéma SALES. STORE_SALES est une table externe pointant vers les données stockées dans la banque d'objets.

    Le paramètre owner indique le nom du schéma. Cet exemple crée un cache de table externe pour l'utilisateur SALES.

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

    Pour plus d'informations, reportez-vous à :

    Procédure CREATE_CACHE

    Colonnes de métadonnées de table externe

  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. Toutefois, 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 du cache.
    SELECT external_table_name, cached, disabled 
      FROM user_external_tab_caches;

    Pour plus d'informations, reportez-vous aux vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

    Utilisez la procédure DBMS_EXT_TABLE_CACHE.VALIDATE pour valider un 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, reportez-vous à Procédure VALIDATE.

Renseigner les fichiers dans le cache de table externe

Affiche des exemples de remplissage de fichiers dans le cache de table externe.

Une fois que vous avez créé un cache, vous pouvez l'alimenter. Le remplissage des fichiers charge le contenu des fichiers de table externes spécifiés dans le cache. Vous pouvez choisir de remplir tous les fichiers d'une table, un pourcentage spécifique de la table, ou spécifier une condition de filtre pour limiter les fichiers que vous souhaitez remplir. Par exemple, vous pouvez filtrer les fichiers en fonction de leur nom ou d'une plage de dates.

Remarque

  • En fonction du quota d'espace alloué au schéma, Oracle tente d'alimenter les fichiers dans le cache. Si la limite de quota affectée est atteinte, Oracle arrête de remplir les fichiers, sauf si l'espace requis est alloué.

  • Le cache de table externe n'est pas actualisé automatiquement. Pour mettre à jour le cache lorsqu'un fichier de la banque d'objets est modifié, vous devez remplir à nouveau le fichier.

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

Ajouter une table au cache de table externe

Utilisez DBMS_EXT_TABLE_CACHE.ADD_TABLE pour remplir une table entière ou un certain pourcentage de la table externe dans le cache.

Exemples

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

Cet exemple tente de remplir la table STORE_SALES dans le cache, en ignorant tous les fichiers existants qui ont déjà été remplis.

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

Cet exemple tente de remplir 80 % de la table STORE_SALES dans le cache, en ignorant tous les fichiers existants qui ont déjà été remplis.

Le paramètre percent_files est facultatif. Si vous n'indiquez pas ce paramètre, la table entière est alimentée dans le cache.

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

Ajouter des fichiers au cache de table externe

Vous pouvez utiliser les procédures suivantes pour ajouter des fichiers au cache de table externe :
  • ADD_FILE : pour ajouter un fichier unique dans le cache.

  • ADD_BY_LIKE : pour ajouter des fichiers spécifiés en fonction des filtres de chemin indiqués.

  • ADD_LATEST_FILES : pour ajouter des fichiers en fonction de l'intervalle de temps indiqué.

Exemples

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_FILE pour remplir un fichier unique dans le 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 renseigne les données du fichier salesdata.parquet dans le 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 le dernier cache du fichier.

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

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE pour remplir un ou plusieurs fichiers dans le cache de 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/sales%.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/customer%.parquet"]'
);
END;
/

Cet exemple remplit tous les fichiers avec des noms commençant par sales ou customer, tout en excluant les fichiers déjà remplis.

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 renseigne les fichiers sales_data1.parquet et sales_data2.parquet dans le cache.

Dans cet exemple, le caractère '#' est défini comme 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 caractère unique.

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

Utilisez la procédure DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES pour remplir un ou plusieurs fichiers en fonction de la date de dernière modification dans le cache de 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 indique l'intervalle de temps. Seuls les fichiers modifiés au cours des sept (7) derniers jours peuvent être renseignés dans le cache.

Le paramètre max_files limite le nombre de fichiers pouvant être renseignés dans le cache. Cet exemple ne renseigne que cinq (5) fichiers.

Le paramètre force force l'écrasement des fichiers indiqués dans le cache même s'ils n'ont pas été modifiés.

Pour plus d'informations, reportez-vous à 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 table externe :
Supprimer des fichiers du cache de table externe

Affiche des exemples de suppression de fichiers du 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 en fonction de leur nom ou d'un intervalle de temps spécifique.

Effacer le cache de table externe

Utilisez DBMS_EXT_TABLE_CACHE.CLEAR pour supprimer tous les fichiers du 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 du cache STORE_SALES et libère tout l'espace utilisé par les fichiers supprimés.

Pour plus d'informations, reportez-vous à la section Procédure CLEAR.

Supprimer des fichiers du cache de table externe

Vous pouvez utiliser les procédures suivantes pour supprimer un ou plusieurs fichiers du cache de table externe :
  • DROP_FILE : permet de supprimer un seul fichier du cache.

  • DROP_BY_LIKE : permet de supprimer des fichiers du cache en fonction des filtres de chemin indiqués.

  • RETIRE_FILES : permet de supprimer des fichiers du cache en fonction de l'intervalle indiqué.

Exemples

Utilisez DBMS_EXT_TABLE_CACHE.DROP_FILE pour supprimer un fichier du 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 du cache et libère tout l'espace utilisé par le fichier supprimé.

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

Utilisez DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE pour supprimer des 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 du 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 du cache et libère tout l'espace utilisé par les fichiers supprimés.

Dans cet exemple, le caractère '#' est défini comme 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 caractère unique.

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

Utilisez DBMS_EXT_TABLE_CACHE.RETIRE_FILES pour supprimer des fichiers en fonction de l'intervalle indiqué. 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, reportez-vous à Procédure RETIRE_FILES.

Les exemples ci-dessus suppriment un ou plusieurs fichiers du cache tout en conservant le cache. Si nécessaire, vous pouvez charger à nouveau les fichiers dans le cache. Pour plus d'informations, reportez-vous à Alimentation de fichiers dans le cache de table externe.

Désactivation et activation du cache de table externe

Affiche des exemples de désactivation et d'activation du cache de table externe.

Exécutez DBMS_EXT_TABLE_CACHE.DISABLE pour désactiver le cache de table externe de la base de données. La désactivation d'un cache ne supprime pas les données du cache. Au lieu de cela, le cache est marqué comme DISABLED et l'optimiseur ne peut pas utiliser le cache pour les réécritures de requête.

Exemple

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

Cet exemple désactive le cache STORE_SALES.

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

Une fois que vous avez désactivé un cache de table externe, utilisez DBMS_EXT_TABLE_CACHE.ENABLE pour l'activer.

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

Cet exemple active le cache STORE_SALES.

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

Supprimer le cache de table externe

Affiche un exemple de suppression du cache de table externe.

Exécutez DBMS_EXT_TABLE_CACHE.DROP_CACHE pour supprimer un cache de table externe. La procédure DBMS_EXT_TABLE_CACHE.DROP_CACHE supprime le cache de table externe indiqué de la base de données et libère l'espace de stockage associé au cache.

Exemple :

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

Cet exemple supprime le cache STORE_SALES du schéma SALES.

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

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

Interrogez la vue USER_EXTERNAL_TAB_CACHES pour vérifier que le cache a été supprimé. Par exemple :
SELECT external_table_name, cached
  FROM user_external_tab_caches;

Pour plus d'informations, reportez-vous aux vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

Définition de préférences de dimensionnement facultatives pour les caches basés sur une stratégie

Explique comment définir des préférences de dimensionnement pour les caches de table externe basés sur une stratégie dans Autonomous AI Database.

Par défaut, le cache de table externe est désactivé pour un utilisateur. Pour activer et créer le cache de table externe, utilisez la procédure DBMS_EXT_TABLE_CACHE.CREATE_CACHE. Le cache est créé dans le schéma par défaut et hérite des limites de quota d'espace définies pour le 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 le 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 indique la taille totale du cache externe en octets. La propriété MAX_CACHE_PERCENT indique la taille totale du cache externe en 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 définit la préférence de mise en cache sur MAX_CACHE_PERCENT pour le schéma SALES.

property_value est égal à 50 %, ce qui indique que le quota d'espace de cache pour le schéma SALES correspond au maximum à 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 définit la préférence de mise en cache sur MAX_CACHE_SIZE pour le schéma SALES.

property_value est 5368709120, ce qui indique que la taille maximale du cache pour le schéma SALES est de 5 Go maximum.

Pour plus d'informations, reportez-vous à 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, reportez-vous à 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 est prioritaire 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 est prioritaire.

  • 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 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 cache est défini par défaut sur UNLIMITED.

Remarque

Pour surveiller l'utilisation de l'espace de cache, interrogez la colonne CACHE_CUR_SIZE dans les vues ALL_EXTERNAL_TAB_CACHES. Pour plus d'informations, reportez-vous aux vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.

Utiliser la mise en cache automatique pour la table externe

Explique comment utiliser la mise en cache automatique pour les tables externes dans la base de données Autonomous AI.

Lorsque vous activez la mise en cache automatique pour votre base de données, celle-ci gère automatiquement l'intégralité du cycle de vie du cache, y compris la création, l'alimentation, l'actualisation et la suppression, sans intervention de votre part. Oracle utilise SQL Tuning Sets (STS - Ensembles de réglages SQL) pour déterminer quelles tables externes peuvent bénéficier de la mise en 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 la surcharge liée à la gestion du cache, car l'utilisation du cache est surveillée en permanence, ce qui garantit que les données de table externe fréquemment consultées restent disponibles dans le cache pour améliorer les temps de réponse des requêtes.

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

Lorsque la mise en cache automatique des tables externes est activée, Oracle crée des caches de table externes marqués comme AUTO et alimente le cache de toutes les données correspondantes d'une table externe si le quota le permet. Les caches AUTO sont actualisés automatiquement selon une planification régulière. Toutefois, vous pouvez également utiliser les procédures DBMS_CACHE.REFRESH ou DBMS_CACHE.CLEAR pour actualiser ou supprimer les caches, respectivement.

Oracle gère les caches AUTO à l'aide d'un algorithme d'expulsion similaire à LRU (Least Recent Used). Lorsque l'espace est insuffisant, les caches auxquels vous avez accédé le plus récemment sont automatiquement supprimés au cours du cycle d'actualisation pour libérer l'espace de stockage.

Pour plus d'informations, reportez-vous à :

Sujets

Activer la mise en cache automatique pour les tables externes

Exemples d'activation de la mise en cache automatique pour les tables externes de la base de données.

Par défaut, la mise en cache automatique est désactivée. Vous pouvez activer la mise en cache automatique pour vos tables externes de manière globale pour tous les utilisateurs de 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 caches de table externes en fonction des statistiques d'utilisation des requêtes de table externe disponibles dans les SQL Tuning Sets (STS - Ensembles de réglages SQL). 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 une stratégie.

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

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

En fonction du 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 de remplissage é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 cache automatique pour tous les utilisateurs de base de données.

    Exemples :

    Exemple d'activation de 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 définit la préférence de mise en cache sur MAX_CACHE_PERCENT comme valeur par défaut pour tous les utilisateurs de base de données et définit le quota de cache de table externe sur 20% au maximum du quota utilisateur total 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.

    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;                                                                 
    /

    Cela spécifie l'étendue à laquelle les caches AUTO sont actualisés au cours 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 définit MAX_REFRESH_WINDOW sur vingt (20) secondes.

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

    Remarque

    La propriété MAX_REFRESH_WINDOW peut être définie uniquement 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 cache automatique par défaut pour les tables externes. Par 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, reportez-vous à Procédure GET_GLOBAL_PROPERTY.

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

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

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

    Utilisez DBMS_CACHE.GET_USER_PROPERTY pour extraire les préférences de mise en cache automatique pour les tables externes d'un utilisateur donné. Par exemple :

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

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

Remarque

Pour surveiller l'utilisation de l'espace de cache, interrogez la colonne CACHE_CUR_SIZE dans les vues ALL_EXTERNAL_TAB_CACHES. Pour plus d'informations, reportez-vous aux vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES.
Actualisation des caches de table externes

Affiche un exemple d'actualisation des caches AUTO pour un schéma spécifié.

Les caches AUTO sont actualisés automatiquement selon une planification régulière. Selon le type d'actualisation indiqué, la base de données peut :
  • Ajoutez de nouveaux caches.

  • Supprimez tous 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).

  • Mettez à jour ou remplissez à nouveau les caches existants.

  • Supprimez les caches les moins récemment consultés lorsque l'espace est insuffisant.

Vous pouvez également utiliser la procédure DBMS_CACHE.REFRESH pour effectuer une actualisation à la demande pour tous les caches d'un utilisateur spécifié.

  1. Vous utilisez DBMS_CACHE.REFRESH pour actualiser tous les caches de table externe d'un utilisateur donné. Par exemple :
    BEGIN
        DBMS_CACHE.REFRESH (      
          owner          => 'SALES',
          refresh_type   => 'ALL');                                                                 
    END;                                                                 
    /

    Cet exemple met à jour les caches existants et crée de nouveaux caches de table externe pour le schéma SALES, si nécessaire.

    La propriété refresh_type indique la portée à laquelle l'actualisation est effectuée. La propriété peut avoir l'une des valeurs suivantes :
    • ALL : tous les caches AUTO existants pour le schéma SALES sont actualisés et, si nécessaire, de nouveaux caches sont créés.

    • CURRENT : seuls les caches existants sont actualisés, aucun nouveau cache n'est ajouté.

    • NEW : seuls les nouveaux caches sont créés.

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

Supprimer les caches de table externes

Affiche un exemple de suppression des caches AUTO pour un schéma spécifié.

A chaque cycle d'actualisation, les caches non valides et les caches les moins récemment consultés 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 donné.

  1. Vous utilisez DBMS_CACHE.CLEAR pour supprimer tous les caches de table externe pour un utilisateur donné. Par exemple :
    BEGIN
     DBMS_CACHE.CLEAR (
        owner => 'SALES');                                                                
    END;                                                                 
    /

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

    Pour plus d'informations, reportez-vous à la section Procédure CLEAR.

Afficher les informations de cache de table externe

Autonomous AI Database fournit des vues qui vous permettent de surveiller le cache de table externe.

Afficher Description

Vues DBA_EXTERNAL_TAB_CACHES et USER_EXTERNAL_TAB_CACHES

Fournit des informations sur tous les caches de table externe de la base de données ou sur les caches de table externe d'un utilisateur.

ALL_EXTERNAL_TAB_CACHE_LOCATIONS

Fournit des informations sur les fichiers du stockage cloud accessibles à l'utilisateur en cours et appartenant à des tables externes mises en cache.

USER_EXTERNAL_TAB_CACHE_LOCATIONS

Fournit des informations sur les fichiers du stockage cloud détenus par l'utilisateur en cours et appartenant à des tables externes mises en cache. Cette vue n'affiche pas la colonne OWNER.

Notes de cache de table externe

Répertorie les remarques et restrictions importantes relatives à l'utilisation du cache de table externe dans une base de données Autonomous AI.

  • Vous pouvez uniquement créer un cache de table externe dans votre propre schéma et pour les tables externes dont vous êtes propriétaire.

  • Un cache de table externe ne peut contenir que des fichiers provenant d'une seule table externe.

  • Vous ne pouvez pas accorder de privilèges sur un cache de table externe et vous pouvez uniquement accéder aux données du cache de table externe dont vous êtes propriétaire.

  • Lorsqu'un fichier est supprimé de la banque d'objets, les données correspondantes dans le cache sont marquées comme non valides et ne sont pas accessibles.