Despre reuşitele cache

Atunci când este activată plasarea în memoria cache, fiecare interogare este evaluată pt. a stabili dacă se califică pt. o reuşită cache.

O reuşită cache înseamnă că Oracle Analytics Cloud a putut folosi memoria cache pt. a răspunde la interogare şi că nu a accesat deloc baza de date. Oracle Analytics Cloud poate folosi cache-ul de interogării pt. a răspunde la interogări la acelaşi nivel de agregare sau la un nivel superior.

Sunt mulţi factori care determină existenţa unei reuşite cache. Tabelul de mai jos descrie aceşti factori.

Factor sau regulă Descriere

Trebuie să se potrivească un subset de coloane din lista SELECT

Toate coloanele din lista SELECT a unei interogări noi trebuie să existe în interogarea din memoria cache pt. a se califica drept o reuşită cache, sau trebuie calculate din coloanele din interogare.

Această regulă descrie cerinţa minimă pentru o reuşită cache, dar respectarea acestei reguli nu garantează o reuşită cache. Se aplică şi celelalte reguli listate în acest tabel.

Coloanele din lista SELECT pot fi compuse din expresii pe coloanele interogărilor din memoria cache

Oracle Analytics Cloud poate calcula expresii pe rezultatele din memoria cache pt. a răspunde la noua interogare, dar în rezultatul din memoria cache trebuie să existe toate coloanele. De exemplu, interogarea:

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

are rezultate cache pe interogarea:

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

deoarece averageprice poate fi calculat din dollars şi unitsales (averageprice = dollars/unitsales).

clauza WHERE trebuie să fie la fel sau un subset logic din punct de vedere semantic

Pentru ca interogarea să se califice drept o reuşită cache, constrângerile clauzei WHERE trebuie să fie ori echivalente cu rezultatele din memoria cache, ori un subset al rezultatelor din memoria cache.

O clauză WHERE care este un subset logic al unei interogări din memoria cache se califică drept reuşită cache dacă subsetul respectă unul dintre următoarele criterii:

  • Un subset al valorilor listei IN. Interogările care solicită mai puţine elemente ale unei liste IN a unei interogări din memoria cache se califică drept reuşite cache. De exemplu, interogarea următoare:

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

    se califică drept reuşită pe următoarea interogare din memoria cache:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Conţine restricţii OR mai puţine (dar identice) decât rezultatul din memoria cache.

  • Conţine un subset logic al unei comparaţii literale. De exemplu, următorul predicat:

    WHERE revenue < 1000

    se califică drept reuşită cache pe o interogare comparabilă cu predicatul:

    WHERE revenue < 5000
  • Nu există nicio clauză WHERE. Dacă o interogare fără nicio clauză WHERE este stocată în cache, atunci interogările care satisfac toate celelalte reguli de reuşită cache se califică drept reuşite cache indiferent de clauza lor WHERE.

În plus, coloanele folosite pe clauza WHERE trebuie să se găsească pe lista de proiecţii. De exemplu, interogarea următoare:

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

Nu are drept rezultat o reuşită cache pt. interogarea de bază din lista precedentă, deoarece REGION nu se află pe lista de proiecţii.

Interogările doar cu dimensiune trebuie să fie o corespondenţă exactă

Dacă o interogare este doar cu dimensiune, adică în interogare nu este inclus niciun fapt şi nicio măsură, atunci doar o corespondenţă exactă a coloanelor de proiecţie ale interogării din memoria cache reuşeşte în cache. Acest comportament previne apariţia falselor pozitive atunci când există mai multe surse logice pt. un tabel de dimensiuni.

Interogările cu funcţii speciale trebuie să fie corespondenţe exacte

Alte interogări care conţin funcţii speciale, precum funcţii de serii de timp (AGO, TODATE şi PERIODROLLING), funcţii de limită şi decalare (OFFSET şi FETCH), funcţii de relaţionare (ISANCESTOR, ISLEAF, ISROOT şi ISSIBLING), funcţii de agregare externă şi în general metricile de filtrare trebuie să fie şi ele asocieri exacte cu coloanele de proiecţie din interogarea stocată în cache. În aceste cazuri, şi filtrul trebuie să fie o corespondenţă exactă. Pentru metricile de filtrare, dacă metrica de filtrare poate fi rescrisă ca o clauză WHERE, atunci se poate folosi memoria cache a subsetului.

Seturile de tabele logice trebuie să corespundă

Pentru a se califica drept reuşite cache, toate interogările de intrare trebuie să aibă acelaşi set de tabele logice ca şi intrarea din memoria cache. Această regulă evită reuşitele cache false. De exemplu, SELECT * FROM product nu corespunde cu SELECT * FROM product, sales.

Valorile de variabile de sesiune trebuie să corespundă, inclusiv variabilele sesiunii de securitate

Dacă declaraţia SQL logică sau cea SQL fizică face referire la orice variabilă de sesiune, atunci valorile variabile de sesiune trebuie să corespundă. Altfel, nu este o reuşită cache.

În plus, valoarea variabilelor de sesiune ce ţin cont de securitate trebuie să corespundă cu valorile variabilelor de securitate a sesiunii, definite în modelul semantic, chiar dacă instrucţiunea logică SQL în sine nu face referire la variabilele de sesiune. Consultaţi Asigurarea unor rezultate corecte în memoria cache, atunci când se utilizează securitatea bazei de date la nivel de rând.

Condiţii de reunire echivalente

Tabelul logic reunit rezultat al unei cereri noi de interogare trebuie să fie acelaşi cu (sau un subset al) rezultatelor din memoria cache pt. a se califica drept reuşită cache.

Atributul DISTINCT trebuie să fie acelaşi

Dacă o interogare din memoria cache elimină înregistrările duplicate prin procesare DISTINCT (de exemplu, SELECT DISTINCT...), atunci cererile de coloane din memoria cache trebuie şi ele să includă procesare DISTINCT; o cerere a aceleiaşi coloane fără procesare DISTINCT este o ratare cache.

Interogările trebuie să conţină niveluri de agregare compatibile

Interogările care cer un nivel agregat de informaţii pot folosi rezultatele din memoria cache la un nivel mai scăzut de agregare. De exemplu, următoarea interogare cere cantitatea vândută la nivel de furnizor şi regiune şi localitate:

SELECT supplier, region, city, qtysold
FROM suppliercity

Următoarea interogare cere cantitatea vândută la nivel de localitate:

SELECT city, qtysold
FROM suppliercity

A doua interogare are drept rezultat o reuşită cache pe prima interogare.

Agregare suplimentară limitată

De exemplu, dacă o interogare cu coloana qtysold este stocată în cache, atunci o cerere de RANK(qtysold) are drept rezultat o ratare cache. În plus, o interogare care cere qtysold la nivel de ţară poate primi o reuşită cache de la o interogare care cere qtysold la nivel de ţară, regiune.

Clauza ORDER BY trebuie să conţină coloane din lista de selectare

Interogările care ordonează după coloane care nu sunt conţinute în lista de selectare au drept rezultat ratări cache.

Diagnosticarea comportamentului de reuşite cache

Pentru a evalua mai bine comportamentul reuşitelor cache, setaţi variabila de sesiune ENABLE_CACHE_DIAGNOSTICS la valoarea 4, aşa cum este ilustrat în următorul exemplu:

ENABLE_CACHE_DIAGNOSTICS=4