Usa cache tabella esterna per migliorare le prestazioni per le tabelle esterne

La cache delle tabelle esterne in Oracle Autonomous AI Database consente di inserire nella cache i dati a cui si accede di frequente dalle tabelle esterne del database.

Nota

La cache delle tabelle esterne è supportata solo per Oracle AI Database 26ai.

Informazioni sulla cache delle tabelle esterne in Autonomous AI Database

Una cache di tabella esterna è un'area di storage nell'Autonomous AI Database che memorizza i dati da una tabella esterna.

I dati esterni non sono gestiti dal database; tuttavia, è possibile utilizzare le tabelle esterne per eseguire query sui dati al di fuori del database. Le query sulle tabelle esterne non saranno veloci quanto le query sulle tabelle di database perché ogni volta che si accede ai dati è necessario recuperarli dai file esterni memorizzati nell'area di memorizzazione degli oggetti.

La cache delle tabelle esterne consente di memorizzare localmente i dati esterni ad accesso frequente. Quando si utilizza la cache, le query su tabelle esterne possono recuperare i dati direttamente dall'Autonomous AI Database, rendendoli notevolmente più veloci. Non è necessario modificare le istruzioni SQL o i flussi di lavoro esistenti per beneficiare di un accesso più rapido, poiché questo meccanismo di inserimento nella cache è completamente trasparente per le applicazioni. È possibile creare cache di tabelle esterne per tabelle esterne partizionate e non partizionate create su tabelle Parquet, ORC, AVRO, CSV e Iceberg.

Di seguito sono riportati alcuni dei vantaggi derivanti dall'utilizzo della cache delle tabelle esterne.
  • Prestazioni migliorate per gli analytics: le query sono diverse volte più veloci per i dati esterni ad accesso frequente, ideali per dashboard, report e strumenti analitici che accedono regolarmente agli stessi dati.

  • 100% trasparente: il meccanismo di inserimento nella cache è completamente trasparente; le applicazioni possono trarre vantaggio da una maggiore velocità senza richiedere modifiche a query, dashboard o applicazioni.

  • Costi cloud inferiori: in un'applicazione multi-cloud, l'inserimento nella cache riduce la necessità di recuperi ripetuti dei dati esterni dallo storage remoto, riducendo così i costi di uscita dei dati associati all'accesso ai dati tra region o cloud.

  • Controllo inserimento nella cache flessibile e con filtro: è possibile inserire nella cache tutti i file, una percentuale di file o solo i dati aggiornati più di recente. È possibile controllare i dati inseriti nella cache, le dimensioni della cache e i limiti di storage per le cache delle tabelle esterne.

Le cache delle tabelle esterne nel database possono essere gestite automaticamente o tramite impostazioni basate su criteri. Con la gestione della cache basata su criteri, puoi definire criteri semplici per popolare, aggiornare e disattivare i file dalla cache, offrendoti un controllo preciso sul contenuto e sulla manutenzione della cache.

Per ulteriori informazioni, vedere Query di dati esterni.

Avvio rapido con cache tabelle esterne

Fornisce esempi per iniziare a creare e popolare le cache di tabelle esterne.

Creare una cache di tabella esterna basata su criteri per lo schema SALES.

Quando si crea una cache, questa è inizialmente vuota e abilitata per la popolazione. La dimensione della cache aumenta ogni volta che un file viene aggiunto, a seconda dei limiti di quota di spazio definiti per lo schema, fino a quando non raggiunge i limiti assegnati.

Utilizzare DBMS_EXT_TABLE_CACHE.CREATE_CACHE per creare cache di tabelle esterne per lo schema. Ad esempio:
BEGIN
    DBMS_EXT_TABLE_CACHE.CREATE_CACHE (      
      owner          => 'SALES',
      table_name     => 'STORE_SALES',
      partition_type => 'PATH');                                                                 
END;                                                                 
/

In questo modo viene creata una cache per la tabella STORE_SALES nello schema SALES. STORE_SALES è una tabella esterna che punta ai dati memorizzati nell'area di memorizzazione degli oggetti.

Il parametro owner specifica il nome dello schema. In questo esempio viene creata una cache di tabella esterna per l'utente SALES.

partition_type controlla la modalità di suddivisione della cache. Con 'PATH', la cache viene partizionata dal percorso della cartella di ogni file di origine. FILE$PATH è una colonna nascosta che memorizza il percorso della cartella (tutto prima del nome del file).

Ad esempio, se un file è …/n/<ns>/b/<bucket>/o/sales/2024/09/data1.parquet, FILE$PATH = 'sales/2024/09/' (la cartella).

Quando si crea una cache di tabella esterna, i relativi metadati vengono memorizzati nel dizionario dati, ma non viene allocato spazio per i dati della cache. È possibile eseguire una query sulla vista USER_EXTERNAL_TAB_CACHES per verificare la creazione della cache. Ad esempio:
SELECT external_table_name, cached, disabled 
  FROM user_external_tab_caches;

Utilizzare la procedura DBMS_EXT_TABLE_CACHE.VALIDATE per convalidare la cache di una tabella esterna. Si è verificato un errore se la tabella esterna di riferimento non è stata trovata nel database. Ad esempio:
BEGIN
  DBMS_EXT_TABLE_CACHE.VALIDATE (
    owner         => 'SALES', 
    table_name    => 'STORE_SALES',
    raise_errors  => TRUE);
END;
/

Eseguire DBMS_EXT_TABLE_CACHE.ADD_TABLE per popolare un'intera tabella nella cache. Ad esempio:

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

Questo esempio tenta di popolare la tabella STORE_SALES nella cache.

Crea cache tabelle esterne gestite automaticamente

Per impostazione predefinita, l'inserimento automatico nella cache è disabilitato. Le cache AUTO vengono create automaticamente quando si abilita l'inserimento automatico nella cache.

Eseguire DBMS_CACHE.SET_USER_PROPERTY per abilitare l'inserimento automatico nella cache della tabella esterna per lo schema HR. Ad esempio:
BEGIN
 DBMS_CACHE.SET_USER_PROPERTY (
 property_name      => 'max_cache_size', 
 property_value_num => 10737418240); 
END; 
/

Questo esempio abilita l'inserimento automatico nella cache per lo schema HR e imposta il parametro MAX_CACHE_SIZE su byte 10737418240, specificando un'allocazione cache massima di 10 GB per le tabelle esterne nello schema HR. Crea inoltre le cache necessarie per le tabelle esterne e le popola.

Esempio per abilitare l'inserimento automatico nella cache per tutti gli utenti del database:
BEGIN
 DBMS_CACHE.SET_GLOBAL_PROPERTY (
 property_name       => 'max_cache_percent',
 property_value_num  => 20);
END; 
/

Utilizzare la proprietà globale MAX_CACHE_PERCENT per impostare il limite di cache predefinito per tutti gli utenti. Quando si imposta MAX_CACHE_PERCENT su 20, l'inserimento automatico nella cache delle tabelle esterne può utilizzare fino al 20% della quota di tablespace assegnata a ciascun utente (ad esempio, un utente con quota di 100 GB può memorizzare nella cache fino a 20 GB, un utente con quota di 10 GB fino a 2 GB). Questa impostazione globale si applica solo all'inserimento automatico nella cache ed è per utente, non è un limite totale per tutti gli utenti. È possibile sostituire questa impostazione predefinita per i singoli utenti eseguendo la procedura DBMS_CACHE.SET_USER_PROPERTY.

Eseguire la query seguente per verificare che le cache siano create e abilitate:
SELECT external_table_name, cached, auto
  FROM all_external_tab_caches;

Le cache AUTO vengono aggiornate automaticamente con una pianificazione regolare. Facoltativamente, è anche possibile utilizzare la procedura DBMS_CACHE.REFRESH per eseguire un aggiornamento su richiesta per tutte le cache di un utente specificato. Ad esempio:
BEGIN
    DBMS_CACHE.REFRESH (      
      owner          => 'HR',
      refresh_type   => 'ALL');                                                                 
END;                                                                 
/

Questo esempio aggiorna le cache esistenti e crea nuove cache di tabelle esterne per lo schema HR, se necessario. La proprietà refresh_type specifica l'ambito in cui viene eseguito l'aggiornamento.

Scegliere la preferenza di inserimento nella cache

Descrive come scegliere la preferenza di inserimento nella cache appropriata, incluso il funzionamento della cache e l'allocazione delle dimensioni per le tabelle esterne.

La cache delle tabelle esterne viene creata come oggetto schema nel database, che viene allocato allo spazio fisico in modo simile al modo in cui le tabelle e gli indici vengono memorizzati nei file di dati. Quando si crea una cache di tabella esterna, viene creata una nuova tabella nello schema e tutti i limiti di quota di spazio impostati per lo schema vengono applicati anche alla cache di tabella esterna.

La gestione esterna della cache delle tabelle può essere di due tipi:
  • Gestione della cache basata su criteri

    • Definire in modo esplicito la modalità di creazione, popolamento, aggiornamento e ritiro delle cache.

    • Fornisce un controllo capillare sui contenuti della cache e sul ciclo di vita.

    • Adatto quando è richiesto un comportamento di inserimento nella cache prevedibile o personalizzato.

  • Gestione automatica della cache

    • Il database crea, popola, aggiorna ed elimina automaticamente le cache.

    • Le azioni sono basate su pattern di query di tabelle esterne e sull'uso del carico di lavoro.

    • Ideale per ambienti in cui il comportamento di inserimento nella cache deve adattarsi dinamicamente senza intervento manuale.

Prerequisiti per creare cache tabella esterna

Elenca i prerequisiti per la creazione della cache delle tabelle esterne.

  • È possibile creare una cache di tabella esterna solo nello schema personale e per le tabelle esterne di cui si è proprietari.

  • È necessario disporre di una quota di spazio appropriata allocata per lo schema per garantire una capacità di storage sufficiente per i dati della cache.

  • È necessario disporre delle credenziali per accedere ai file di tabella esterni memorizzati nell'area di memorizzazione degli oggetti. Non è necessario creare le credenziali se si abilitano le credenziali del principal risorsa per accedere all'area di memorizzazione degli oggetti Oracle Cloud Infrastructure.

Usa cache basata su criteri per tabelle esterne

Descrive come utilizzare l'inserimento nella cache basato su criteri per le tabelle esterne in Autonomous AI Database.

L'inserimento nella cache basato su criteri fornisce un controllo esplicito sul modo in cui i dati esterni vengono inseriti nella cache, aggiornati e gestiti all'interno del database. In questo approccio è possibile definire i criteri di inserimento nella cache e gestire l'intero ciclo di vita della cache utilizzando le procedure PL/SQL disponibili nel package DBMS_EXT_TABLE_CACHE. Queste procedure consentono di eseguire in modo esplicito varie operazioni del ciclo di vita della cache, ad esempio la creazione e l'inserimento di dati nelle cache, l'eliminazione dei file dalla cache e l'abilitazione o la disabilitazione delle cache.

Questo approccio ti offre un controllo dettagliato sul comportamento della cache. È possibile specificare quali file di tabelle esterne o quale percentuale dei dati della tabella esterna deve essere inserita nella cache, garantendo così un uso ottimale dello spazio della cache in base ai requisiti del carico di lavoro. Procedure come ADD_BY_LIKE e ADD_LATEST_FILES consentono di filtrare e popolare i file nella cache in base a diversi parametri, ad esempio pattern di nomi file, tempi di modifica o criteri di freschezza dei dati. Analogamente, è possibile utilizzare procedure quali CLEAR, RETIRE_FILES o DROP_BY_LIKE per rimuovere i file dalla cache.

Poiché le cache basate su criteri non sono gestite da un algoritmo di rimozione automatica, il database non le elimina automaticamente sotto la pressione dello spazio. Se lo spazio della cache non è disponibile, è possibile che i nuovi file non vengano popolati finché non viene liberato spazio aggiuntivo. Questo approccio offre una maggiore flessibilità ed è ideale per carichi di lavoro in cui è necessario un maggiore controllo sui contenuti della cache.

Per ulteriori informazioni, vedere DBMS_EXT_TABLE_CACHE Package.

Il seguente diagramma di flusso descrive i passi per la gestione delle cache basate su criteri mediante il pacchetto DBMS_EXT_TABLE_CACHE. Include passi chiave come la creazione della cache, la popolazione e l'eliminazione.


Segue la descrizione di adb_external_table_cache.png
Descrizione dell'immagine adb_external_table_cache.png

Argomenti

Popola file nella cache tabella esterna

Descrive come popolare la cache basata su criteri creata in precedenza.

Dopo aver creato una cache, è possibile inserire i file nella cache. Il popolamento dei file carica il contenuto dei file di tabella esterni specificati nella cache. È possibile scegliere di popolare tutti i file di una tabella, una percentuale specifica della tabella o specificare una condizione di filtro per limitare i file da popolare. Ad esempio, è possibile filtrare i file in base ai nomi o a un intervallo di date.

Nota

  • A seconda della quota di spazio allocata per lo schema, Oracle tenta di popolare i file nella cache. Se viene raggiunto il limite di quota assegnato, Oracle interrompe l'inserimento dei dati nei file a meno che non venga allocato lo spazio richiesto.

  • La cache delle tabelle esterne non viene aggiornata automaticamente. Per aggiornare la cache quando viene modificato un file nell'area di memorizzazione degli oggetti, è necessario ripopolare il file.

  • Quando un file viene eliminato dall'area di memorizzazione degli oggetti, i dati inseriti nella cache corrispondenti diventano immediatamente non validi e non possono essere recuperati.

Aggiungi tabella a cache tabella esterna

Utilizzare DBMS_EXT_TABLE_CACHE.ADD_TABLE per popolare un'intera tabella o una determinata percentuale della tabella esterna nella cache.

Esempi

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

Questo esempio tenta di popolare la tabella STORE_SALES nella cache, saltando tutti i file esistenti che sono già stati popolati.

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

Questo esempio tenta di popolare l'80% della tabella STORE_SALES nella cache, saltando tutti i file esistenti che sono già stati popolati.

Il parametro percent_files è facoltativo; se non si specifica questo parametro, l'intera tabella viene popolata nella cache.

Per ulteriori informazioni, vedere ADD_TABLE Procedure.

Aggiungi file a cache tabella esterna

È possibile utilizzare le seguenti procedure per aggiungere uno o più file alla cache delle tabelle esterne:
  • ADD_FILE: consente di aggiungere un singolo file nella cache.

  • ADD_BY_LIKE: consente di aggiungere uno o più file specificati in base ai filtri del percorso specificati.

  • ADD_LATEST_FILES: per aggiungere uno o più file in base all'intervallo di tempo specificato.

Esempi

Utilizzare la procedura DBMS_EXT_TABLE_CACHE.ADD_FILE per inserire un singolo file nella cache delle tabelle esterne. Ad esempio:
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;
/

In questo esempio vengono inseriti nella cache i dati del file salesdata.parquet.

Questo esempio salta l'inserimento del file nella cache se il file specificato esiste nella cache e non è stato modificato dall'ultima inserimento del file nella cache.

Per ulteriori informazioni, vedere ADD_FILE Procedure.

Utilizzare la procedura DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE per popolare uno o più file nella cache delle tabelle esterne. Ad esempio:
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;
/

Questo esempio popola tutti i file con nomi che iniziano con sales o customer, escludendo i file che sono già stati popolati.

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

In questo esempio vengono inseriti nella cache i file sales_data1.parquet e sales_data2.parquet.

In questo esempio, il carattere '#' è definito come carattere di escape. Il carattere '_' che segue '#' viene considerato come carattere di sottolineatura letterale, non come carattere jolly che corrisponde a un singolo carattere.

Per ulteriori informazioni, vedere ADD_BY_LIKE Procedure.

Utilizzare la procedura DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES per popolare uno o più file in base alla data dell'ultima modifica nella cache delle tabelle esterne. Ad esempio:
BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES (
    owner        => 'SALES', 
    table_name   => 'STORE_SALES',
    since        => INTERVAL '7' DAY,
    max_files    => 5,
    force        => TRUE);
END;
/

Il parametro since specifica l'intervallo di tempo. Solo i file modificati negli ultimi sette (7) giorni possono essere inseriti nella cache.

Il parametro max_files limita il numero di file che è possibile inserire nella cache. In questo esempio vengono inseriti solo cinque (5) file.

Il parametro force forza la sovrascrittura dei file specificati nella cache anche se i file non sono stati modificati.

Per ulteriori informazioni, vedere ADD_LATEST_FILES Procedure.

Eseguire una query sulle viste del dizionario dati riportate di seguito per elencare i file inseriti nella cache della tabella esterna.

Elimina file dalla cache tabella esterna

Mostra esempi per eliminare i file dalla cache delle tabelle esterne.

È possibile rimuovere tutti i file dalla cache oppure specificare le condizioni di filtro per eliminare uno o più file dalla cache. Ad esempio, è possibile filtrare i file in base al nome o a un intervallo di tempo specifico.

Cancella cache tabella esterna

Utilizzare DBMS_EXT_TABLE_CACHE.CLEAR per eliminare tutti i file dalla cache delle tabelle esterne. Ad esempio:

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

Questo esempio elimina tutti i file dalla cache STORE_SALES e disalloca tutto lo spazio utilizzato dai file rimossi.

Per ulteriori informazioni, vedere Procedura CLEAR.

Elimina file dalla cache tabella esterna

È possibile utilizzare le seguenti procedure per eliminare uno o più file dalla cache delle tabelle esterne:
  • DROP_FILE: consente di eliminare un singolo file dalla cache.

  • DROP_BY_LIKE: consente di eliminare uno o più file dalla cache in base ai filtri del percorso specificati.

  • RETIRE_FILES: consente di eliminare uno o più file dalla cache in base all'intervallo specificato.

Esempi

Utilizzare DBMS_EXT_TABLE_CACHE.DROP_FILE per eliminare un file dalla cache delle tabelle esterne. Ad esempio:

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

In questo esempio il file salesdata.parquet viene eliminato dalla cache e viene disallocato tutto lo spazio utilizzato dal file rimosso.

Per ulteriori informazioni, vedere DROP_FILE Procedure.

Utilizzare DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE per eliminare uno o più file in base al parametro path_filters. Ad esempio:

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

Questo esempio elimina i file salesdata.parquet e salesdata1.parquet dalla cache e disalloca tutto lo spazio utilizzato dai file rimossi.

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

Questo esempio elimina i file sales#_data1 e sales#_data2 dalla cache e disalloca tutto lo spazio utilizzato dai file rimossi.

In questo esempio, il carattere '#' è definito come carattere di escape. Il carattere '_' che segue '#' viene considerato come carattere di sottolineatura letterale, non come carattere jolly che corrisponde a un singolo carattere.

Per ulteriori informazioni, vedere DROP_BY_LIKE Procedure.

Utilizzare DBMS_EXT_TABLE_CACHE.RETIRE_FILES per eliminare uno o più file in base all'intervallo specificato. Ad esempio:

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

Questo esempio elimina i file che risalgono a più di trenta (30) giorni dalla cache e disalloca tutto lo spazio utilizzato dai file rimossi.

Per ulteriori informazioni, vedere RETIRE_FILES Procedure.

Gli esempi precedenti rimuovono uno o più file dalla cache mantenendo la cache. È possibile caricare di nuovo i file nella cache quando necessario. Per ulteriori informazioni, vedere Inserimento dei file nella cache delle tabelle esterne.

Disabilita e abilita cache tabella esterna

Mostra esempi per disabilitare e abilitare la cache delle tabelle esterne.

Eseguire DBMS_EXT_TABLE_CACHE.DISABLE per disabilitare la cache delle tabelle esterne dal database. La disabilitazione di una cache non elimina i dati dalla cache; invece, la cache è contrassegnata come DISABLED e l'ottimizzatore non può utilizzare la cache per la riscrittura delle query.

Esempio

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

In questo esempio viene disabilitata la cache STORE_SALES.

Per ulteriori informazioni, vedere Procedura DISABILE.

Dopo aver disabilitato una cache di tabella esterna, utilizzare DBMS_EXT_TABLE_CACHE.ENABLE per abilitare la cache.

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

Questo esempio abilita la cache STORE_SALES.

Per ulteriori informazioni, vedere Procedura ENABLE.

Elimina cache tabella esterna

Mostra un esempio per eliminare la cache della tabella esterna.

Eseguire DBMS_EXT_TABLE_CACHE.DROP_CACHE per eliminare una cache di tabella esterna. La procedura DBMS_EXT_TABLE_CACHE.DROP_CACHE rimuove la cache delle tabelle esterne specificata dal database e rilascia lo spazio di memorizzazione associato alla cache.

Esempio:

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

In questo esempio viene eliminata la cache STORE_SALES dallo schema SALES.

L'eliminazione di una cache comporta la rimozione dei metadati dal dizionario dati e l'eliminazione di tutti i dati inseriti nella cache.

Per ulteriori informazioni, vedere DROP_CACHE Procedure.

Eseguire una query sulla vista USER_EXTERNAL_TAB_CACHES per verificare che la cache sia stata eliminata. Ad esempio:
SELECT external_table_name, cached
  FROM user_external_tab_caches;

Per ulteriori informazioni, vedere Viste DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES.

Impostare le preferenze di dimensionamento facoltative per le cache basate su criteri

Descrive come impostare le preferenze di dimensionamento per le cache delle tabelle esterne basate su criteri in Autonomous AI Database.

Per impostazione predefinita, la cache delle tabelle esterne è disabilitata per un utente. Per abilitare e creare la cache delle tabelle esterne, utilizzare la procedura DBMS_EXT_TABLE_CACHE.CREATE_CACHE. La cache viene creata nello schema predefinito ed eredita tutti i limiti di quota di spazio definiti per lo schema. Tuttavia, è anche possibile utilizzare la procedura DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY per definire le quote di spazio per la cache delle tabelle esterne. Per impostare i limiti di quota di spazio, utilizzare i parametri PROPERTY_NAME e PROPERTY_VALUE della procedura DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY.

Il parametro PROPERTY_NAME accetta i valori MAX_CACHE_SIZE e MAX_CACHE_PERCENT. La proprietà MAX_CACHE_SIZE specifica la dimensione totale della cache esterna in byte. La proprietà MAX_CACHE_PERCENT specifica la dimensione totale della cache esterna come percentuale della quota dell'utente specificato.

Esempi

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

In questo esempio la preferenza di inserimento nella cache viene impostata su MAX_CACHE_PERCENT per lo schema SALES.

property_value è il 50%, che specifica che la quota di spazio della cache per lo schema SALES è un massimo del 50% della quota di spazio totale definita per SALES.

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

In questo esempio la preferenza di inserimento nella cache viene impostata su MAX_CACHE_SIZE per lo schema SALES.

property_value è 5368709120, che specifica che la dimensione massima della cache per lo schema SALES è fino a 5 GB.

Per ulteriori informazioni, vedere SET_USER_PROPERTY Procedure e CREATE_CACHE Procedure.

Utilizzare DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY per recuperare le proprietà delle dimensioni della cache.

Esempio:

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

Per ulteriori informazioni, vedere GET_USER_PROPERTY Function.

Per impostare le proprietà delle dimensioni della cache, tenere presente l'ordine di precedenza riportato di seguito.

  • Quando si definiscono MAX_CACHE_SIZE, MAX_CACHE_PERCENT e la quota di spazio, MAX_CACHE_PERCENT ha la precedenza su MAX_CACHE_SIZE.

  • Quando è definito solo MAX_CACHE_SIZE e non è definita MAX_CACHE_PERCENT o quota di spazio, ha la precedenza MAX_CACHE_SIZE.

  • Quando viene definita solo la quota spazio e non vengono definiti MAX_CACHE_SIZE e MAX_CACHE_PERCENT, la quota dimensione cache viene impostata automaticamente sul 10% della quota totale dello schema.

  • Se MAX_CACHE_SIZE, MAX_CACHE_PERCENT o la quota spazio non è definita, la quota spazio cache viene impostata automaticamente su UNLIMITED.

Nota

Per monitorare l'utilizzo dello spazio nella cache, eseguire una query sulla colonna CACHE_CUR_SIZE nelle viste ALL_EXTERNAL_TAB_CACHES. Per ulteriori informazioni, vedere Viste DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES.

Usa inserimento nella cache automatico per tabella esterna

Descrive come utilizzare l'inserimento automatico nella cache per le tabelle esterne in Autonomous AI Database.

Quando abiliti l'inserimento automatico nella cache per il tuo database, il database gestisce automaticamente l'intero ciclo di vita della cache, inclusi creazione, popolamento, aggiornamento ed eliminazione, senza richiedere l'intervento dell'utente. Oracle utilizza meccanismi interni per determinare quali tabelle esterne possono trarre vantaggio dall'inserimento nella cache, quando aggiornare le cache e quando eliminarle in base ai pattern di utilizzo e allo spazio di storage disponibile. Questo approccio riduce il carico di lavoro per la gestione della cache, poiché l'uso della cache viene monitorato continuamente, garantendo che i dati delle tabelle esterne ad accesso frequente rimangano disponibili nella cache per migliorare i tempi di risposta delle query.

Per impostazione predefinita, l'inserimento automatico nella cache non è abilitato nel database. Per abilitarla, è necessario impostare la dimensione della cache su un valore diverso da zero utilizzando procedure come DBMS_CACHE.SET_USER_PROPERTY fornite nel pacchetto DBMS_CACHE. È possibile configurare l'inserimento automatico nella cache per un utente specifico o come impostazione predefinita per tutti gli utenti del database, a seconda delle esigenze.

Quando l'inserimento automatico nella cache delle tabelle esterne è abilitato, Oracle crea nella cache delle tabelle esterne contrassegnate con AUTO e inserisce nella cache tutti i dati corrispondenti di una tabella esterna se la quota lo consente. Le cache AUTO vengono aggiornate automaticamente con una pianificazione regolare. Tuttavia, è anche possibile utilizzare le procedure DBMS_CACHE.REFRESH o DBMS_CACHE.CLEAR per aggiornare o eliminare le cache, rispettivamente.

Oracle gestisce le cache AUTO utilizzando un algoritmo di rimozione simile a quello utilizzato meno di recente (LRU). Se la pressione dello spazio è ridotta, le cache a cui si è avuto accesso meno di recente vengono automaticamente eliminate durante il ciclo di aggiornamento per rilasciare lo spazio di memorizzazione.

Per ulteriori informazioni, vedere gli argomenti riportati di seguito.

Argomenti

Abilita inserimento automatico nella cache per tabelle esterne

Descrive come configurare le proprietà di inserimento automatico nella cache.

Per impostazione predefinita, l'inserimento automatico nella cache è disabilitato. È possibile abilitare l'inserimento automatico nella cache per le tabelle esterne a livello globale per tutti gli utenti del database o per un utente specifico. Dopo aver abilitato l'inserimento automatico nella cache, il database crea automaticamente le cache delle tabelle esterne. Tutte le nuove cache create vengono contrassegnate come AUTO. Le cache esistenti continuano a seguire le impostazioni di gestione della cache basate su criteri.

Utilizzare DBMS_CACHE.SET_GLOBAL_PROPERTY o DBMS_CACHE.SET_USER_PROPERTY per impostare le proprietà di inserimento nella cache AUTO, incluse le proprietà per abilitare l'inserimento automatico nella cache a livello globale o per un utente specificato, rispettivamente. Le preferenze di inserimento nella cache a livello utente hanno la precedenza sulle preferenze di inserimento nella cache globali. Utilizzare i parametri PROPERTY_NAME e PROPERTY_VALUE di queste procedure per impostare i limiti di quota spazio per le cache delle tabelle esterne.

A seconda della quota di spazio specificata, Oracle crea le cache e tenta di popolare tutti i dati della tabella esterna nella cache. Il processo di popolamento non riesce se la dimensione della cache non è sufficiente per contenere l'intero dato della tabella esterna.

  1. Utilizzare DBMS_CACHE.SET_GLOBAL_PROPERTY per abilitare l'inserimento automatico nella cache per tutti gli utenti del database.

    Esempi:

    Esempio per abilitare l'inserimento automatico nella cache per tutti gli utenti del database:

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

    In questo esempio la preferenza di inserimento nella cache viene impostata su MAX_CACHE_PERCENT come predefinita per tutti gli utenti del database e la quota della cache della tabella esterna viene impostata su un massimo di 20% della quota utente assegnata totale. È possibile sostituire questa impostazione predefinita per i singoli utenti utilizzando la procedura DBMS_CACHE.SET_USER_PROPERTY.

    Quando si abilita l'inserimento automatico nella cache, è possibile specificare facoltativamente l'ambito dell'aggiornamento della cache, ovvero le cache idonee per l'aggiornamento durante ogni ciclo di aggiornamento, e definire la finestra temporale consentita per completare il processo di aggiornamento.

    Esempio di impostazione della modalità di aggiornamento automatico per tutti gli utenti del database:
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'AUTO_REFRESH_MODE', 
        property_value_str  => 'NEW');                                                              
    END;                                                                 
    /

    Specifica l'ambito in cui le cache AUTO vengono aggiornate durante ogni ciclo di aggiornamento. Il valore property_value_str può essere sostituito a livello di schema utilizzando la procedura DBMS_CACHE.SET_USER_PROPERTY.

    Esempio per impostare la finestra temporale massima consentita per completare l'aggiornamento:
    BEGIN
     DBMS_CACHE.SET_GLOBAL_PROPERTY (
        property_name       => 'MAX_REFRESH_WINDOW', 
        property_value_num  => 20);                                                              
    END;                                                                 
    /

    In questo esempio MAX_REFRESH_WINDOW viene impostato su venti (20) secondi.

    Per ulteriori informazioni, vedere SET_GLOBAL_PROPERTY Procedure.

    Nota

    La proprietà MAX_REFRESH_WINDOW può essere definita solo a livello di database. Questa proprietà non può essere impostata a livello di schema.

    Eseguire DBMS_CACHE.GET_GLOBAL_PROPERTY per recuperare le preferenze di inserimento automatico nella cache predefinite per le tabelle esterne. Ad esempio:

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

    Per ulteriori informazioni, vedere GET_GLOBAL_PROPERTY Procedure.

  2. Utilizzare DBMS_CACHE.SET_USER_PROPERTY per abilitare l'inserimento automatico nella cache della tabella esterna per un utente specifico. Ad esempio:
    BEGIN
     DBMS_CACHE.SET_USER_PROPERTY (
            property_name       => 'MAX_CACHE_PERCENT', 
            property_value_num  => 50,
            owner               => 'HR');                                                                
    END;                                                                 
    /

    In questo esempio vengono sostituite le preferenze di inserimento nella cache globale con i valori specificati in DBMS_CACHE.SET_USER_PROPERTY.

    Per ulteriori informazioni, vedere SET_USER_PROPERTY Procedure.

    Utilizzare DBMS_CACHE.GET_USER_PROPERTY per recuperare le preferenze di inserimento automatico nella cache per le tabelle esterne per un utente specificato. Ad esempio:

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

    Per ulteriori informazioni, vedere GET_USER_PROPERTY Procedure.

Nota

Per monitorare l'utilizzo dello spazio nella cache, eseguire una query sulla colonna CACHE_CUR_SIZE nelle viste ALL_EXTERNAL_TAB_CACHES. Per ulteriori informazioni, vedere Viste DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES.

Aggiornamento delle cache delle tabelle esterne

Mostra un esempio di aggiornamento delle cache AUTO per lo schema specificato.

Le cache AUTO vengono aggiornate automaticamente con una pianificazione regolare. A seconda del tipo di aggiornamento specificato, il database può:
  • Aggiungi nuove cache.

  • Eliminare le cache non valide (le cache che diventano inaccessibili sono contrassegnate come non valide e vengono eliminate nel ciclo di aggiornamento successivo).

  • Aggiorna o ripopola le cache esistenti.

  • Rilasciare le cache meno recenti quando si è sotto la pressione dello spazio.

In alternativa, è anche possibile utilizzare la procedura DBMS_CACHE.REFRESH per eseguire un aggiornamento su richiesta per tutte le cache dell'utente HR.

  1. Utilizzare DBMS_CACHE.REFRESH per aggiornare tutte le cache delle tabelle esterne dell'utente HR. Ad esempio:
    BEGIN
        DBMS_CACHE.REFRESH (      
          owner          => 'HR',
          refresh_type   => 'ALL');                                                                 
    END;                                                                 
    /

    Questo esempio aggiorna le cache esistenti e crea nuove cache di tabelle esterne per lo schema HR, se necessario.

    La proprietà refresh_type specifica l'ambito in cui viene eseguito l'aggiornamento. La proprietà può avere uno dei seguenti valori:
    • ALL: tutte le cache AUTO esistenti per lo schema HR vengono aggiornate e, se necessario, vengono create nuove cache.

    • CURRENT: vengono aggiornate solo le cache esistenti, non vengono aggiunte nuove cache.

    • NEW: vengono create solo nuove cache.

    Per ulteriori informazioni, vedere Procedura REFRESH.

Elimina cache tabelle esterne

Mostra un esempio per eliminare le cache AUTO per lo schema specificato.

Durante ogni ciclo di aggiornamento, le cache non valide e le cache a cui si accede meno di recente vengono eliminate dal database. In alternativa, è possibile utilizzare la procedura DBMS_CACHE.CLEAR per eliminare tutte le cache per un utente specificato.

  1. Utilizzare DBMS_CACHE.CLEAR per eliminare tutte le cache di tabelle esterne per lo schema HR. Ad esempio:
    BEGIN
     DBMS_CACHE.CLEAR (
        owner => 'HR');                                                                
    END;                                                                 
    /

    In questo esempio vengono eliminate tutte le cache delle tabelle esterne per lo schema HR.

    Per ulteriori informazioni, vedere Procedura CLEAR.

Monitorare e diagnosticare le prestazioni della cache delle tabelle esterne

Autonomous AI Database fornisce viste che consentono di monitorare la cache delle tabelle esterne.

Visualizza Descrizione

Visualizzazioni DBA_EXTERNAL_TAB_CACHES e USER_EXTERNAL_TAB_CACHES

Fornisce informazioni su tutte le cache delle tabelle esterne nel database o sulle cache delle tabelle esterne di un utente.

ALL_EXTERNAL_TAB_CACHE_LOCATIONS

Fornisce informazioni sui file nello storage cloud accessibili all'utente corrente e appartenenti alle tabelle esterne inserite nella cache.

USER_EXTERNAL_TAB_CACHE_LOCATIONS

Fornisce informazioni sui file nello storage cloud di proprietà dell'utente corrente e appartenenti alle tabelle esterne inserite nella cache. In questa vista non viene visualizzata la colonna OWNER.

Queste viste forniscono informazioni dettagliate sulle modalità di memorizzazione, accesso e gestione dei dati inseriti nella cache per le tabelle esterne all'interno del database. Queste viste consentono di monitorare le prestazioni della cache, identificare dati obsoleti o obsoleti e analizzare l'utilizzo dello spazio per garantire un'efficienza ottimale delle query. Monitorando queste viste, è possibile rilevare quando le cache devono essere aggiornate, verificare che le dimensioni della cache rientrino nei limiti configurati e diagnosticare i colli di bottiglia delle prestazioni correlati all'accesso ai dati esterni.

Esempi:

La query seguente fornisce informazioni sulle cache delle tabelle esterne attive o non più valide. È quindi possibile cancellare o rilasciare le cache obsolete per liberare spazio di archiviazione in base alle esigenze:
SELECT table_name, cached, stale, last_refreshed, last_accessed
  FROM all_external_tab_cache_locations
  ORDER BY stale DESC, usage_count DESC;

La query seguente fornisce informazioni sull'inventario della cache e sull'uso dello spazio:

SELECT external_table_name, cache_cur_size, cache_max_size, disabled
    FROM user_external_tab_caches;

Casi d'uso per inserimento tabella esterna nella cache

Descrive gli scenari comuni in cui l'inserimento nella cache delle tabelle esterne è vantaggioso.

Caso d'uso Cosa inserire nella cache Impatto sui costi Impatto sulle prestazioni Note

BI interattiva o dashboard su tabelle esterne

Tabelle o partizioni esterne sottoposte a query frequenti che alimentano dashboard

Elimina ripetute letture cross-cloud o regionali

Mantiene i dati a caldo locali per tempi di risposta più rapidi e coerenti ed evita l'avvio a freddo

Si tratta dello scenario più comune

Analytics multicloud (ad esempio, Autonomous AI Database su OCI che legge S3 o GCS o Azure)

Data set a caldo a cui si accede da negozi di oggetti non OCI

Taglia l'uscita del cloud e riduce i costi delle richieste del provider

Rimuove l'I/O remoto e la latenza di rete

Richiama insieme costi e latenza

Accesso tra più aree (stesso cloud)

Dati esterni in un'altra area

Evita l'uscita tra più aree nelle scansioni ripetute

Riduce la latenza localizzando le letture

La stessa logica del multicloud.

Aggiornamento vista materializzata su dati esterni

Tabelle esterne di origine per le viste materializzate

Riduce l'uscita di ripetizione per gli aggiornamenti pianificati

Stabilizza e velocizza l'aggiornamento delle viste materializzate; riduce i tempi di scansione remota

Ideale per aggregati quasi in tempo reale

Pipeline dei file più recenti (zona di destinazione)

Ultime N ore o giorni di file utilizzando ADD_LATEST_FILES

 

I dati più recenti sono sempre caldi

 

Dati di ricerca o di riferimento di piccole dimensioni ma con join frequente

Tabelle esterne di piccole dimensioni utilizzate nei join

Impedisce il sovraccarico a causa di molte piccole richieste

Mantiene i dati di ricerca locali per i join

I piccoli dati del dizionario sono sempre aggiornati, non è necessario mantenere un ETL complesso

Data science e ingegneria delle funzionalità

Formazione o set di funzioni riutilizzati in tabelle esterne

Meno letture remote durante il lavoro iterativo

Scansioni ripetute più veloci durante la sperimentazione

Funziona bene con i loop basati su notebook

Area di memorizzazione degli oggetti frammentata o limitata

Qualsiasi tabella esterna ad alto traffico

Meno tentativi in molti utenti

Scambia le query dalla limitazione del negozio e dal throughput delle variabili

Migliora la prevedibilità degli SLA

Iceberg o grandi laghi divisi

Partizioni a caldo o istantanee lette frequentemente

Evita letture ripetute delle stesse strisce di parquet

Localizza le pagine di dati per le partizioni a caldo; tempi di query più costanti

Collegamento incrociato alla pagina di impostazione dell'iceberg

Esplorazione ad hoc su larga scala

Tabelle esterne provvisorie con accesso ripetuto

Evita il rimborso dell'uscita durante l'esplorazione

Rende le query di follow-up scattanti dopo il primo passaggio

Buono sulle rampe senza copiare le condutture.