Trafienia w pamięci podręcznej - informacje podstawowe

Gdy jest włączone buforowanie (przechowywanie w pamięci podręcznej), każde zapytanie jest oceniane w celu ustalenia, czy kwalifikuje się do trafienia w pamięci podręcznej.

Trafienie w pamięci podręcznej oznacza, że Oracle Analytics Cloud była w stanie użyć pamięci podręcznej do odpowiedzenia na zapytanie i nie przechodziła do bazy danych. Oracle Analytics Cloud może używać pamięci podręcznej zapytań do udzielania odpowiedzi na zapytania na tym samym lub wyższym poziomie agregacji.

O trafieniu w pamięci podręcznej decyduje wiele czynników. Zostały one opisane w poniższej tabeli.

Czynnik lub reguła Opis

Musi być zgodny podzbiór kolumn z listy SELECT

Aby można było uznać za trafienie w pamięci podręcznej, muszą w buforowanym zapytaniu istnieć wszystkie kolumny z listy SELECT nowego zapytania albo musi być możliwe obliczenie ich z kolumn z zapytania.

Ta reguła opisuje minimalny wymóg dotyczący trafienia w pamięci podręcznej, lecz spełnienie tej reguły nie gwarantuje trafienia. Mają zastosowanie także inne reguły wymienione w tej tabeli.

Kolumny z listy SELECT mogą być tworzone przy użyciu wyrażeń odnoszących się do kolumn z buforowanych zapytań

Oracle Analytics Cloud, aby odpowiedzieć na nowe zapytanie, może obliczyć wyrażenia z użyciem buforowanych wyników, lecz w buforowanym wyniku muszą się znajdować wszystkie te kolumny. Na przykład zapytanie:

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

ma trafienie w pamięci podręcznej, wynikające z zapytania:

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

ponieważ averageprice można obliczyć z dollars i unitsales (averageprice = dollars/unitsales).

Klauzula WHERE musi być semantycznie identyczna lub stanowić podzbiór logiczny

Aby zapytanie mogło zostać zakwalifikowane jako trafienie w pamięci podręcznej, więzy klauzuli WHERE muszą być równoważne więzom w buforowanym wyniku lub jego podzbiorze.

Klauzula WHERE, będąca podzbiorem logicznym buforowanego zapytania, kwalifikuje się jako trafienie w pamięci podręcznej, jeśli podzbiór spełnia jedno z następujących kryteriów:

  • Podzbiór wartości z listy IN. Zapytania wymagające mniejszej liczby elementów z listy IN buforowanego zapytania kwalifikują się jako trafienia. Na przykład następujące zapytanie:

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

    kwalifikuje się jako trafienie w związku z następującym buforowanym zapytaniem:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • Zawiera mniej identycznych więzów OR niż buforowany wynik.

  • Zawiera podzbiór logiczny porównania literałowego. Na przykład następujący predykat:

    WHERE revenue < 1000

    kwalifikuje się jako trafienie w pamięci podręcznej w związku z porównywalnym zapytaniem z predykatem:

    WHERE revenue < 5000
  • Nie ma klauzuli WHERE. Jeśli jest buforowane zapytanie niemające klauzuli WHERE, to zapytania spełniające wszystkie pozostałe reguły trafienia w pamięci podręcznej - bez względu na ich klauzulę WHERE - kwalifikują się jako trafienia.

Dodatkowo kolumny, które są używane w klauzuli WHERE, muszą się znajdować na liście rzutowania. Na przykład następujące zapytanie:

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

nie stanowi trafienia w pamięci podręcznej związanego z zapytaniem wypełniającym na poprzedniej liście, ponieważ na liście rzutowania nie ma kolumny REGION.

Zapytania tylko z wymiarami muszą być w pełni zgodne

Jeśli zapytanie jest zapytaniem tylko z wymiarami, tj. w zapytaniu nie są zawarte żadne fakty ani miary, to trafienie w pamięci podręcznej ma miejsce tylko przy pełnej zgodności kolumn rzutowania z zapytania buforowanego. Takie działanie zapobiega wynikom fałszywie pozytywnym, gdy dla tabeli wymiarów istnieje więcej niż jedno źródło logiczne.

Zapytania z funkcjami specjalnymi muszą być w pełni zgodne

Inne zapytania zawierające funkcje specjalne, takie jak funkcje ciągów czasowych (AGO, TODATE i PERIODROLLING), funkcje ograniczające i funkcje przesunięcia (OFFSET i FETCH), funkcje relacji (ISANCESTOR, ISLEAF, ISROOT i ISSIBLING), zewnętrzne funkcje agregacji oraz miary filtrowania ogólnego muszą być w pełni zgodne z kolumnami rzutowania z buforowanego zapytania. W tych przypadkach także i filtr musi być w pełni zgodny. W przypadku miar filtrowania można wykorzystać pamięć podręczną podzbiorów, jeśli miary filtrowania można zapisać w formie klauzuli WHERE.

Zbiór tabel logicznych musi być zgodny

Wszystkie przychodzące zapytania, aby mogły zostać zakwalifikowane jako trafienie w pamięci podręcznej, muszą mieć ten sam zbiór tabel logicznych co buforowany wpis. Ta reguła zapobiega fałszywym trafieniom w pamięci podręcznej. Na przykład SELECT * FROM product nie jest zgodne z SELECT * FROM product, sales.

Wartości zmiennych sesyjnych, w tym zmiennych sesyjnych związanych z zabezpieczeniami, muszą być zgodne

Jeśli instrukcja fizycznego lub logicznego SQL odwołuje się do jakiejkolwiek zmiennej sesyjnej, to wartości zmiennych sesyjnych muszą być zgodne. W przeciwnym razie nie nastąpi trafienie w pamięci podręcznej.

Ponadto wartości zmiennych sesyjnych wrażliwych na zabezpieczenia muszą być zgodne ze zdefiniowanymi w modelu semantycznym wartościami zmiennych sesyjnych związanych z zabezpieczeniami, nawet jeśli instrukcja logicznego SQL nie odwołuje się do zmiennych sesyjnych. Zob. Zapewnienie właściwych wyników z pamięci podręcznej, gdy dla bazy danych są używane zabezpieczenia na poziomie wierszy.

Równoważne warunki złączenia

Powstająca wskutek nowego zapytania złączona tabela logiczna musi - aby została zakwalifikowana jako trafienie w pamięci podręcznej - być identyczna z buforowanymi wynikami albo stanowić ich podzbiór.

Atrybut DISTINCT musi być identyczny

Jeśli buforowane zapytanie eliminuje duplikaty za pomocą przetwarzania DISTINCT (na przykład SELECT DISTINCT...), to żądania dotyczące buforowanych kolumn muszą także zawierać przetwarzanie DISTINCT; żądanie dotyczące tej samej kolumny bez przetwarzania DISTINCT stanowi chybienie w pamięci podręcznej.

Zapytania muszą zawierać kompatybilne poziomy agregacji

Zapytania żądające zagregowanego poziomu informacji mogą korzystać z buforowanych wyników na niższym poziomie agregacji. Na przykład poniższe zapytanie ma uzyskać ilość sprzedaną na poziomie dostawcy, regionu oraz miejscowości:

SELECT supplier, region, city, qtysold
FROM suppliercity

Poniższe zapytanie uzyskuje ilość sprzedaną na poziomie miejscowości:

SELECT city, qtysold
FROM suppliercity

Drugie zapytanie stanowi trafienie w pamięci podręcznej, związane z pierwszym zapytaniem.

Ograniczona dodatkowa agregacja

Na przykład, jeśli zapytanie z kolumną qtysold jest buforowane, to żądanie RANK(qtysold) stanowi chybienie w pamięci podręcznej. Ponadto zapytanie żądające ilości qtysold na poziomie kraju może stanowić trafienie związane z zapytaniem żądającym ilości qtysold na poziomie kraju i regionu.

Klauzula ORDER BY musi się składać z kolumn z listy SELECT

Zapytania porządkujące wyniki według kolumn, które nie są zawarte w wynikach listy SELECT, stanowią chybienia w pamięci podręcznej.

Diagnozowanie funkcjonowania trafień w pamięci podręcznej

Chcąc lepiej ocenić funkcjonowanie trafień w pamięci podręcznej, należy ustawić zmienną sesyjną ENABLE_CACHE_DIAGNOSTICS na 4, jak pokazano w następującym przykładzie:

ENABLE_CACHE_DIAGNOSTICS=4