Informazioni sugli accessi alla cache

Quando l'inserimento nella cache è abilitato, ogni query viene valutata per determinare se è idonea per l'accesso alla cache.

Con l'espressione accesso alla cache si indica che Oracle Analytics Cloud è stato in grado di utilizzare la cache per rispondere alla query senza ricorrere affatto al database. Oracle Analytics Cloud può utilizzare la cache delle query per rispondere alle query allo stesso livello di aggregazione o a un livello di aggregazione più elevato.

L'accesso alla cache è determinato da vari fattori. Questi fattori sono descritti nella tabella riportata di seguito.

Fattore o regola Descrizione

Un subset di colonne nella lista SELECT deve corrispondere

Tutte le colonne nella lista SELECT di una nuova query devono esistere nella query inserita nella cache per essere idonee per un accesso alla cache oppure devono poter essere calcolate dalle colonne nella query.

Questa regola descrive il requisito minimo per accedere alla cache, ma soddisfarla non garantisce che l'accesso alla cache si verifichi. Vengono applicate anche le altre regole elencate in questa tabella.

Le colonne nella lista SELECT possono essere costituite da espressioni presenti nelle colonne delle query inserite nella cache

Oracle Analytics Cloud è in grado di calcolare le espressioni dei risultati inseriti nella cache per rispondere alla nuova query, ma tutte le colonne devono trovarsi nel risultato inserito nella cache. Ad esempio, la query:

SELECT product, month, averageprice FROM sales WHERE year = 2000

accede alla cache nella query:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

perché averageprice può essere calcolato da dollars e unitsales (averageprice = dollars/unitsales).

La clausola WHERE deve essere uguale dal punto di vista semantico o essere un subset logico

Affinché la query venga ritenuta idonea per l'accesso alla cache, i vincoli della clausola WHERE devono essere equivalenti ai risultati inseriti nella cache o a un subset dei risultati inseriti nella cache.

Una clausola WHERE che costituisce un subset logico di una query inserita nella cache viene ritenuta idonea per l'accesso alla cache se il subset soddisfa uno dei criteri riportati di seguito.

  • Subset di valori della lista IN. Le query che richiedono un numero di elementi minore di una query inserita nella cache della lista IN sono idonee per l'accesso alla cache. Ad esempio, la query seguente:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    è idonea per l'accesso alla query inserita nella cache seguente:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Contiene un numero di vincoli OR minore (ma vincoli identici) rispetto al risultato inserito nella cache.

  • Contiene un subset logico di un confronto di valori. Ad esempio, il predicato seguente:

    WHERE revenue < 1000

    è idonea per l'accesso alla cache per una query confrontabile con il predicato:

    WHERE revenue < 5000
  • Non vi è alcuna clausola WHERE. Se una query senza clausola WHERE viene inserita nella cache, le query che soddisfano tutte le altre regole di accesso alla cache vengono ritenute idonee a prescindere dalle relative clausole WHERE.

Inoltre, le colonne utilizzate nella clausola WHERE deve esistere nella lista di proiezione. Ad esempio, la query seguente:

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

non comporta un accesso alla cache per la query di popolamento nella lista precedente perché REGION non si trova nella lista di proiezione.

Le query solo dimensioni devono costituire una corrispondenza esatta

Se una query è del tipo solo dimensioni, ovvero è priva di fact o misure incluse, solo una corrispondenza esatta delle colonne di proiezione della query inserita nella cache comporta l'accesso alla cache. Questo funzionamento impedisce i falsi positivi in presenza di più origini logiche per una tabella dimensione.

Le query con funzioni speciali devono costituire una corrispondenza esatta

Anche le altre query che contengono funzioni speciali, quali ad esempio funzioni di serie temporali (AGO, TODATE e PERIODROLLING), funzioni LIMIT e di offset (OFFSET e FETCH), funzioni di relazione (ISANCESTOR, ISLEAF, ISROOT e ISSIBLING), funzioni di aggregazione esterne e in generale le metriche di filtro devono costituire una corrispondenza esatta con le colonne di proiezione nella query inserita nella cache. In questi casi anche il filtro deve costituire una corrispondenza esatta. Per le metriche di filtro, se possono essere riscritte come clausola WHERE, potrà essere utilizzata la cache del subset.

Il set di tabelle logiche deve corrispondere

Per essere considerate idonee per l'accesso alla cache, tutte le query in entrata devono avere lo stesso set di tabelle logiche come voce della cache. Questa regola evita che si verifichino falsi accessi alla cache. Ad esempio, SELECT * FROM product non corrisponde a SELECT * FROM product, sales.

I valori delle variabili di sessione, comprese le variabili di sessione inerenti alla sicurezza, devono corrispondere

Se l'istruzione SQL logico o SQL fisico fa riferimento a una variabile di sessione qualsiasi, i valori delle variabili di sessione devono corrispondere. In caso contrario, l'accesso alla cache non si verifica.

Inoltre, il valore delle variabili di sessione sensibili alla sicurezza deve corrispondere ai valori delle variabili della sessione di sicurezza definiti nel modello semantico, anche se l'istruzione SQL logica non fa riferimento alle variabili di sessione. Vedere Garantire risultati cache corretti quando si usa la sicurezza database a livello di riga.

Condizioni di join equivalenti

La tabella logica unita tramite join risultante di una nuova richiesta di query deve essere uguale ai risultati inseriti nella cache, o a un subset di tali risultati, per essere idonea per l'accesso alla cache.

L'attributo DISTINCT deve essere uguale

Se una query inserita nella cache elimina i record duplicati con l'elaborazione DISTINCT (ad esempio, SELECT DISTINCT...), anche le richieste per le colonne inserite nella cache devono includere l'elaborazione DISTINCT; una richiesta per la stessa colonna senza elaborazione DISTINCT è un accesso alla cache non riuscito.

Le query devono contenere livelli di aggregazione compatibili

Le query che richiedono un livello di informazioni aggregato possono utilizzare i risultati inseriti nella cache a un livello di aggregazione inferiore. La query seguente, ad esempio, richiede la quantità venduta a livello di fornitore, area e città:

SELECT supplier, region, city, qtysold
FROM suppliercity

La query seguente richiede la quantità venduta a livello di città:

SELECT city, qtysold
FROM suppliercity

La seconda query ha come risultato l'accesso alla cache sulla prima query.

Aggregazione aggiuntiva limitata

Ad esempio, se una query con la colonna qtysold è inserita nella cache, una richiesta per RANK(qtysold) ha come risultato un accesso alla cache non riuscito. Inoltre, una query che richiede qtysold a livello di paese può ottenere l'accesso alla cache da una query che richiede qtysold a livello di paese e area.

La clausola ORDER BY deve essere costituita da colonne nella lista SELECT

Le query ordinate in base a colonne non contenute nella lista SELECT hanno come risultato un accesso alla cache non riuscito.

Diagnosi del funzionamento degli accessi alla cache

Per valutare meglio il funzionamento degli accessi alla cache, impostare su 4 la variabile di sessione ENABLE_CACHE_DIAGNOSTICS, come mostrato nell'esempio seguente:

ENABLE_CACHE_DIAGNOSTICS=4