Info over cachetreffers

Wanneer caches zijn geactiveerd, wordt elke zoekvraag geëvalueerd om te bepalen of deze zich kwalificeert voor een cachetreffer.

Een cachetreffer betekent dat Oracle Analytics Cloud in staat was de cache te gebruiken om de zoekvraag te beantwoorden en helemaal geen gebruik hoefde te maken van de database. Oracle Analytics Cloud kan de zoekvraagcache gebruiken om zoekvragen op hetzelfde of een hoger aggregatieniveau te beantwoorden.

Vele factoren bepalen mede of een cachetreffer heeft plaatsgevonden. In de onderstaande tabel worden deze factoren beschreven.

Factor of regel Beschrijving

Een subset kolommen in de SELECT-lijst moet matchen.

Alle kolommen in de SELECT-lijst van een nieuwe zoekvraag moeten bestaan in de zoekvraag in de cache om te kwalificeren als een cachetreffer of ze moeten berekend kunnen worden aan de hand van de kolommen in de zoekvraag.

Deze regel beschrijft de minimale vereiste om van een cachetreffer te spreken, maar aan deze regel voldoen is geen garantie voor een cachetreffer. De overige regels in deze tabel zijn ook van toepassing.

Kolommen in de SELECT-lijst kunnen worden samengesteld uit uitdrukkingen in kolommen van de zoekvragen in de cache.

Oracle Analytics Cloud kan uitdrukkingen op resultaten in de cache berekenen als antwoord op de nieuwe zoekvraag, maar alle kolommen moeten zich in het resultaat in de cache bevinden. Bijvoorbeeld, de zoekvraag:

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

treffers in cache op de zoekvraag:

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

omdat averageprice kan worden berekend aan de hand van dollars en unitsales (averageprice = dollars/unitsales).

WHERE-clausule moet semantisch hetzelfde zijn of een logische subset

Voordat de zoekvraag kan worden gekwalificeerd als een cachetreffer, moeten de beperkingen van de WHERE-clausule gelijk zijn aan de resultaten in de cache of een subset zijn van de resultaten in de cache.

Een WHERE-clausule die een logische subset is van een zoekvraag in de cache, kan worden gekwalificeerd als een cachetreffer als de subset voldoet aan één van de volgende criteria:

  • Een subset van waarden in de IN-lijst. Zoekvragen die minder elementen vereisen van een IN-lijst voor de zoekvraag in de cache, worden gekwalificeerd als cachetreffer. Bijvoorbeeld, de volgende zoekvraag:

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

    wordt gekwalificeerd als een treffer op de volgende zoekvraag in de cache:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Deze bevat minder (maar identieke) OR-beperkingen dan het resultaat in de cache.

  • Deze bevat een logische subset van een letterlijke vergelijking. Bijvoorbeeld, het volgende predicaat:

    WHERE revenue < 1000

    wordt gekwalificeerd als een cachetreffer op een vergelijkbare zoekvraag met het predicaat:

    WHERE revenue < 5000
  • Er is geen WHERE-clausule. Als een zoekvraag zonder WHERE-clausule zich in de cache bevindt, dan worden andere zoekvragen die voldoen aan alle andere regels voor cachetreffers gekwalificeerd als cachetreffers, ongeacht de bijbehorende WHERE-clausule.

Bovendien moet kolommen die worden gebruikt in de WHERE-clausule op de projectielijst staan. Bijvoorbeeld, de volgende zoekvraag:

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

Resulteert niet in een cachetreffer voor de vulzoekvraag in de vorige lijst omdat REGION niet op de projectielijst staat.

Zoekvragen met alleen dimensies moeten een exacte match opleveren.

Als een zoekvraag alleen een dimensie bevat, dit wil zeggen dat er geen feit of meting is opgenomen in de zoekvraag, dan zorgt alleen een exacte match van de projectiekolommen van de zoekvraag in de cache voor een treffer die de cache treft. Door dit gedrag wordt het optreden van 'valse positieven' vermeden wanneer er meerdere logische bronnen zijn voor een dimensietabel.

Zoekvragen met speciale functies moeten een exacte match zijn.

Andere zoekvragen die speciale functies bevatten, zoals tijdreeksfuncties, (AGO, TODATE en PERIODROLLING), limiet- en offsetfuncties (OFFSET en FETCH), relationele functies (ISANCESTOR, ISLEAF, ISROOT en ISSIBLING), externe aggregatiefuncties, en filtermetrieken in het algemeen moeten ook een exacte match opleveren met de projectiekolommen in de query in cache. In deze gevallen moet de filter ook een exacte match zijn. Voor filtermetrieken, als de filtermetriek kan worden herschreven als een WHERE-clausule, kan van de subsetcache gebruik worden gemaakt.

Een set logische tabellen moet matchen

Om te worden gekwalificeerd als een cachetreffer, moeten alle inkomende zoekvragen dezelfde set logische tabellen hebben als de cache-ingang. Door deze regel worden ongeldige cachetreffers vermeden. Bijvoorbeeld: SELECT * FROM product matcht niet met SELECT * FROM product, sales.

Waarden van sessievariabelen moeten matchen, inclusief veiligheidssessievariabelen.

Als het logische of fysieke SQL-statement verwijst naar een sessievariabele, moeten de waarden van de sessievariabelen matchen. Anders kunnen we niet spreken van een cachetreffer.

Bovendien moeten de waarden van de sessievariabelen die veiligheidsgevoelig zijn, matchen met de waarden van de veiligheidssessievariabelen die zijn gedefinieerd in semntisch model, ook als het logische SQL-statement zelf niet verwijst naar sessievariabelen. Zie Zorgen voor correcte cacheresultaten bij het gebruik van databasebeveiliging op rijniveau.

Gelijkwaardige join-voorwaarden

De logische join-tabel die het resultaat is van een nieuwe zoekvraag moet hetzelfde zijn als (of een subset zijn van) de resultaten in cache om te worden gekwalificeerd als een cachetreffer.

Het DISTINCT-attribuut moet hetzelfde zijn.

Als een zoekvraag in cache dubbele records door een verwerking met DISTINCT (bijvoorbeeld: SELECT DISTINCT...), moeten aanvragen voor de kolommen in cache ook verwerking met DISTINCT gebruiken. Een aanvraag voor dezelfde kolom zonder de verwerking met DISTINCT is een cachemisser.

Zoekvragen moeten compatibele aggregatieniveaus bevatten.

Zoekvragen die een geaggregeerd informatieniveau aanvragen, kunnen resultaten in de cache gebruiken op een lager aggregatieniveau. In de volgende zoekvraag worden bijvoorbeeld de verkochte hoeveelheid bij de leverancier op regionaal en op plaatselijk niveau aangevraagd:

SELECT supplier, region, city, qtysold
FROM suppliercity

In de volgende zoekvraag wordt de verkochte hoeveelheid op het plaatselijk niveau aangevraagd:

SELECT city, qtysold
FROM suppliercity

De tweede zoekvraag resulteert in een cachetreffer op de eerste zoekvraag.

Beperkte extra aggregatie

Als bijvoorbeeld een zoekvraag met de kolom qtysold in de cache is geplaatst, resulteert een zoekvraag naar RANK(qtysold) in een cachemisser. Bovendien kan een zoekvraag die een aanvraag uitvoert op qtysold op landelijk niveau een cachetreffer krijgen van een zoekvraag die een aanvraag uitvoert op qtysold op het landelijk en regionaal niveau.

De ORDER BY-clausule moet bestaan uit kolommen in de SELECT-lijst.

Zoekvragen die zijn geordend op kolommen die niet zijn opgenomen in de SELECT-list, resulteren in cachemissers.

Diagnose stellen van het gedrag van cachetreffers

Om het gedrag van cachetreffers beter te kunnen beoordelen, stelt u de sessievariabele ENABLE_CACHE_DIAGNOSTICS in op '4', zoals in het volgende voorbeeld wordt getoond:

ENABLE_CACHE_DIAGNOSTICS=4