Améliorer le rendement des interrogations avec la mémoire cache de table externe
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.
Rubriques connexes
À propos de la mémoire cache de table externe dans Autonomous Database
Une mémoire cache de table externe est une zone de stockage dans votre base de données Autonomous 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 mémoire cache de table externe vous permet de mettre en mémoire cache les données fréquemment consultées à partir de tables externes dans votre base de données Autonomous Database, sans avoir à modifier vos applications qui accèdent aux données, ce qui permet un accès plus rapide aux tables externes.
-
Performance améliorée : les interrogations sont plusieurs fois plus rapides pour les données externes fréquemment consultées. C'est la solution idéale 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 aucune 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, ce qui réduit les frais de trafic sortant associés à l'accès aux données entre les régions ou les nuages.
-
Parquet
-
ORC
-
AVRO
-
Tables Iceberg
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.
-
Vous devez disposer du privilège
EXECUTE
sur l'ensembleDBMS_EXT_TABLE_CACHE
. Notez que 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.
Limitations
Répertorie les notes et restrictions importantes concernant l'utilisation du cache de table externe dans une base de données Autonomous Database.
-
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 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 une mémoire cache de table externe et vous ne pouvez accéder qu'aux données de la mémoire cache de table externe dont vous êtes responsable.
-
Lorsqu'un fichier est supprimé du magasin d'objets, les données correspondantes dans le cache sont marquées comme non valides et ne peuvent pas être consultées.
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.
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édureADD_TABLE.
Ajouter des fichiers à la mémoire 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
DBMS_EXT_TABLE_CACHE.ADD_FILE
pour alimenter un seul fichier dans la mémoire cache de la 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édureADD_FILE.
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édureADD_BY_LIKE.
DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES
pour alimenter dans la mémoire cache de la table externe un ou plusieurs fichiers basés sur la date de la dernière modification. 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édureADD_LATEST_FILES.
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.
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
-
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 la 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édureDROP_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édureDROP_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é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 à partir 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.
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.
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 Database fournit des vues qui vous permettent de surveiller la mémoire cache de table externe.
Voir | Description |
---|---|
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. |
|
Fournit des informations sur les fichiers du stockage en nuage accessibles à l'utilisateur courant et appartenant à des tables externes mises en cache. |
|
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 |
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é.
-
Lorsque
MAX_CACHE_SIZE
,MAX_CACHE_PERCENT
et le quota d'espace sont définis,MAX_CACHE_PERCENT
a préséance surMAX_CACHE_SIZE
. -
Lorsque seul
MAX_CACHE_SIZE
est défini et queMAX_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
etMAX_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 valeurUNLIMITED
.
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.
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.
-
file$path
: Spécifie le texte du chemin d'accès au fichier jusqu'au début du nom de l'objet. -
file$name
: Spécifie le nom de l'objet, y compris tout le texte qui suit le dernier "/
".
Par 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.
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
Accès à Oracle Support
Les clients Oracle accéderont aux services de soutien Oracle et utiliseront ces services conformément aux conditions générales spécifiées dans leur commande Oracle pour les services applicables.