Přístupy do paměti cache

Když je povoleno používat paměť cache, je u každého dotazu vyhodnoceno, zda je oprávněn k přístupu do paměti cache.

Přístup do paměti cache je umožněn, pokud služba Oracle Analytics Cloud dokáže použít paměť cache k zodpovězení dotazu, přičemž v takovém případě vůbec nepřejde do databáze. Služba Oracle Analytics Cloud může pomocí paměti cache dotazů odpovídat na dotazy na stejné nebo vyšší úrovni agregace.

O možnosti přistupovat do paměti cache rozhoduje mnoho faktorů. Tyto faktory jsou popsány v níže uvedené tabulce.

Faktor nebo pravidlo Popis

Podmnožina sloupců v seznamu SELECT se musí shodovat.

Všechny sloupce v seznamu SELECT nového dotazu se musí vyskytovat v dotazu obsaženém v paměti cache nebo je musí být možné vypočítat ze sloupců v dotazu, aby dotaz získal oprávnění k přístupu do paměti cache.

Toto pravidlo popisuje minimální požadavek pro přístup do paměti cache, ale splnění tohoto pravidla přístup do paměti cache nezaručuje. Platí také ostatní pravidla uvedená v této tabulce.

Sloupce v seznamu SELECT mohou být složeny z výrazů zahrnujících sloupce dotazů uložených v paměti cache.

Služba Oracle Analytics Cloud může k získání odpovědi na nový dotaz vypočítat výrazy zahrnující výsledky obsažené v paměti cache, ale všechny sloupce musí být obsaženy ve výsledku uloženém v paměti cache. Například dotaz:

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

využije při přístupu do paměti cache dotaz:

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

protože údaj averageprice lze vypočítat z údajů dollars a unitsales (averageprice = dollars / unitsales).

Klauzule WHERE musí být sémanticky stejná nebo musí být logickou podmnožinou.

Pokud má dotaz získat oprávnění k přístupu do paměti cache, musí být omezení klauzule WHERE buď ekvivalentní s výsledky uloženými v paměti cache, nebo podmnožinou těchto výsledků.

Klauzule WHERE, která je logickou podmnožinou dotazu uloženého v paměti cache, získá oprávnění k přístupu do paměti cache, pokud tato podmnožina splňuje jedno z následujících kritérií:

  • Podmnožina hodnot seznamu IN. Oprávnění k přístupu do paměti cache získají dotazy vyžadující méně prvků, než jich obsahuje seznam IN dotazu uloženého v paměti cache. Například následující dotaz:

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

    získá oprávnění k přístupu přes následující dotaz uložený v paměti cache:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Obsahuje méně (ale identických) omezení OR než výsledek uložený v paměti cache.

  • Obsahuje logickou podmnožinu doslovného srovnání. Například následující předpoklad:

    WHERE revenue < 1000

    získá oprávnění k přístupu do paměti cache přes srovnávací dotaz s předpokladem:

    WHERE revenue < 5000
  • Dotaz bez klauzule WHERE. Pokud je v paměti cache dotaz bez klauzule WHERE, pak dotazy, které splňují všechna ostatní pravidla pro přístup do paměti cache, získají oprávnění k přístupu do paměti cache bez ohledu na svou klauzuli WHERE.

Kromě toho musí být sloupce použité v klauzuli WHERE obsaženy v seznamu projekcí. Například následující dotaz:

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

Neumožní přístup do paměti cache pro dotaz v předchozím seznamu, protože položka REGION není uvedena v seznamu projekcí.

Dotazy týkající se pouze dimenze se musí přesně shodovat.

Pokud se dotaz týká pouze dimenze, což znamená, že neobsahuje žádný fakt ani ukazatel, pak přístup do paměti cache zajistí pouze přesná shoda se sloupci projekce dotazu uloženého v paměti cache. Toto chování zabrání falešně pozitivním shodám, když pro tabulku dimenzí existuje více logických zdrojů.

Dotazy se speciálními funkcemi se musí přesně shodovat.

Další dotazy, které obsahují speciální funkce, jako jsou funkce časových řad (AGO, TODATE a PERIODROLLING), funkce limitů a posunů (OFFSET a FETCH), relační funkce (ISANCESTOR, ISLEAF, ISROOT a ISSIBLING), funkce externích agregací a metriky obecného filtrování, se musí také přesně shodovat se sloupci projekce dotazu uloženého v paměti cache. V těchto případech musí pro filtr rovněž nastat přesná shoda. Pro metriky filtru, pokud lze metriku filtru přepsat jako klauzuli WHERE, je pak možné využít paměť cache podmnožiny.

Sada logických tabulek se musí shodovat.

K získání oprávnění pro přístup do paměti cache musí mít všechny příchozí dotazy stejnou sadu logických tabulek jako položka v paměti cache. Toto pravidlo zabrání falešným přístupům do paměti cache. Například dotaz SELECT * FROM product neodpovídá dotazu SELECT * FROM product, sales.

Hodnoty proměnných relace se musí shodovat, včetně proměnných relace zabezpečení.

Pokud logický příkaz SQL nebo fyzický příkaz SQL odkazuje na libovolnou proměnnou relace, musí se hodnoty proměnné relace shodovat. V opačném případě není přístup do paměti cache povolen.

Kromě toho se hodnoty proměnných relace, které jsou citlivé z hlediska zabezpečení, musí shodovat s hodnotami proměnných relace zabezpečení, které jsou definovány v sémantickém modelu, přestože samotný logický příkaz SQL na proměnné relace neodkazuje. Viz část Zajištění správných výsledků v paměti cache při používání zabezpečení databáze na úrovni řádek.

Ekvivalentní podmínky spojení

K získání oprávnění pro přístup do paměti cache musí být výsledná spojená logická tabulka požadavku nového dotazu shodná s výsledky (nebo jejich podmnožinou) v paměti cache.

Atribut DISTINCT musí být shodný.

Pokud dotaz uložený v paměti cache odstraňuje duplicitní záznamy pomocí zpracování DISTINCT (například SELECT DISTINCT...), pak požadavky pro sloupce uložené v paměti cache musí také zahrnovat zpracování DISTINCT. Při požadavku pro stejný sloupec bez zpracování DISTINCT nebudou v paměti cache nalezena žádná data.

Dotazy musí obsahovat kompatibilní úrovně agregace.

Dotazy, které vyžadují agregovanou úroveň informací, mohou použít výsledky obsažené v paměti cache na nižší úrovni agregace. Následující dotaz například požaduje množství prodané na úrovni dodavatele, regionu a města:

SELECT supplier, region, city, qtysold
FROM suppliercity

Následující dotaz požaduje množství prodané na úrovni města:

SELECT city, qtysold
FROM suppliercity

Druhý dotaz povede k přístupu do paměti cache přes první dotaz.

Omezená další agregace

Pokud je například v paměti cache uložen dotaz se sloupcem qtysold, pak požadavek RANK(qtysold) způsobí, že v paměti cache nebudou nalezena žádná data. Navíc dotaz, který požaduje data qtysold na úrovni země, může získat přístup do paměti cache z dotazu, který požaduje data qtysold na úrovni země a regionu.

Klauzule ORDER BY musí být složena ze sloupců obsažených v seznamu SELECT.

Dotazy s řazením podle sloupců, které nejsou obsaženy v seznamu SELECT, způsobí, že v paměti cache nebudou nalezena žádná data.

Diagnostika chování přístupu do paměti cache

Chcete-li lépe posoudit chování přístupu do paměti cache, nastavte proměnnou relace ENABLE_CACHE_DIAGNOSTICS na hodnotu 4, jak ukazuje následující příklad:

ENABLE_CACHE_DIAGNOSTICS=4