Oracle Analytics Cloud utrzymuje w pamięci podręcznej lokalną pamięć podręczną z wynikami zapytań.
Tematy:
Pamięć podręczna zapytań Oracle Analytics Cloud pozwala spełniać wiele kolejnych zapytań bez uzyskiwania dostępu do źródeł danych z zaplecza i tym samym zwiększa wydajność zapytań. Wpisy w pamięci podręcznej mogą jednak ulec dezaktualizacji, jeśli w źródłach danych z zaplecza wystąpią jakieś zmiany.
Najszybszym sposobem przetworzenia zapytania jest pominięcie procesu jego przetwarzania i użycie gotowej odpowiedzi.
Oracle Analytics Cloud przechowuje w lokalnej pamięci podręcznej wyniki uzyskane dla zapytań. Jeśli z wyników tych będzie mogło skorzystać inne zapytanie, to proces przetwarzania w bazie danych dla tego zapytania jest eliminowany. Może to się przyczynić do radykalnego skrócenia średniego czasu odpowiedzi na zapytanie.
Zdolność udzielenia odpowiedzi na zapytanie przy użyciu lokalnej pamięci podręcznej nie tylko poprawia wydajność, ale także oszczędza zasoby sieciowe i skraca czas przetwarzania w serwerze bazy danych. Zasoby sieciowe są oszczędzane, ponieważ do Oracle Analytics Cloud nie są zwracane wyniki pośrednie. Niewykonywanie zapytania w bazie danych odciąża serwer bazy danych i pozwala zająć mu się innymi zadaniami. Jeśli dla bazy danych jest używany system opłat, to wykonywanie mniejszej liczby zapytań może się przyczynić do zmniejszenia kosztów.
Inną korzyścią z używania pamięci podręcznej do udzielania odpowiedzi na zapytanie jest oszczędność czasu przetwarzania w Oracle Analytics Cloud, zwłaszcza jeśli wyniki są pobierane z więcej niż jednej bazy danych. W zależności od zapytania może występować na serwerze znaczące przetwarzanie złączeń i sortowania. Jeśli zapytanie jest już obliczone, przetwarzanie to jest eliminowane i zasoby serwera są zwalniane do wykonywania innych zadań.
Podsumowując, korzystanie z pamięci podręcznej (buforowanie) może radykalnie poprawić wydajność zapytań, zmniejszyć ruch w sieci, ograniczyć przetwarzanie w bazie danych oraz zredukować obciążenia związane z przetwarzaniem.
Korzystanie z pamięci podręcznej przynosi wiele oczywistych korzyści, ale także pociąga za sobą pewne koszty.
Potencjalna możliwość dezaktualizacji wyników w pamięci podręcznej
Koszty administracyjne, związane z zarządzaniem pamięcią podręczną
Przy odpowiednim zarządzaniu pamięcią podręczną, korzyści są o wiele większe niż koszty.
Niektóre zadania administracyjne są związane z pamięcią podręczną. Trzeba odpowiednio ustawić czas utrwalania pamięci podręcznej dla każdej z tabel fizycznych, wiedząc, jak często dane w tych tabelach są aktualizowane.
Jeśli częstotliwość aktualizacji zmienia się, trzeba pilnować zmian i - gdy będzie to potrzebne - ręcznie opróżniać pamięć podręczną.
Jeśli wpisy w pamięci podręcznej nie zostaną skasowane, gdy ulegną zmianie dane w używanych bazach danych, to potencjalnie zapytania będą mogły zwracać nieaktualne wyniki.
Trzeba ocenić, czy jest to akceptowalne. Może być dopuszczalne, aby w pamięci podręcznej były przechowywane niektóre przestarzałe dane. Trzeba zdecydować, jaki poziom przestarzałych danych jest akceptowalny, po czym skonfigurować i stosować zbiór założeń systemowych odzwierciedlających te poziomy.
Na przykład załóżmy, że aplikacja analizuje dane firmowe z dużego konglomeratu, a my dokonujemy rocznych podsumowań różnych działów firmy. Nowe dane wpływają w istotny sposób na zapytania, ponieważ mają wpływ jedynie na podsumowania w przyszłym roku. W tym przypadku pozostawienie wpisów w pamięci podręcznej może być bardziej opłacalne niż jej opróżnienie.
Załóżmy jednak, że bazy danych są aktualizowane trzy razy dziennie oraz że kierujemy zapytania dotyczące działań w bieżącym dniu. W takim przypadku trzeba opróżniać pamięć podręczną znacznie częściej lub - być może - rozważyć zrezygnowanie z niej.
W innym scenariuszu zbiór danych jest na nowo konstruowany w okresowych interwałach, na przykład raz na tydzień. W takim przypadku można w ramach procesu ponownego konstruowania zbioru danych opróżnić całą pamięć podręczną, uzyskując pewność, że w pamięci podręcznej nie ma przestarzałych danych.
Bez względu na konkretną sytuację trzeba oszacować, czy jest akceptowalne zwracanie nieaktualnych danych użytkownikom.
Jeśli dla określonej puli połączeń jest włączone logowanie współużytkowane, to pamięć podręczna może być współużytkowana i nie trzeba jej wypełniać osobno dla poszczególnych użytkowników.
Jeśli logowanie współużytkowane nie je włączone i jest używane logowanie do bazy danych przez indywidualnych użytkowników, to każdy z nich generuje swój własny wpis w pamięci podręcznej.
W Oracle Analytics Cloud pamięć podręczna zapytań jest domyślnie włączona. Buforowanie zapytań można włączyć lub wyłączyć na stronie Zaawansowane ustawienia systemowe.
Chcąc skutecznie zarządzać zmianami w używanych bazach danych i monitorować wpisy w pamięci podręcznej, trzeba opracować strategię zarządzania pamięcią podręczną.
Potrzebny jest proces unieważniania wpisów w pamięci podręcznej, gdy ulegną zmianie dane używane w tabelach składających się na wpis w pamięci podręcznej, oraz proces monitorowania, identyfikowania i usuwania wszelkich niepożądanych wpisów.
Omówiono tu następujące tematy:
Wybór strategii zarządzania pamięcią podręczną zależy od zmienności danych w używanych bazach danych oraz zdolności przewidywania tych zmian.
Zależy także od liczby i typów zapytań wypełniających pamięć podręczną oraz stopnia ich używania. W tej części zawarto przegląd różnych strategii zarządzania pamięcią podręczną.
Można wyłączyć buforowanie dla całego systemu, zatrzymując wprowadzanie wszystkich nowych wpisów do pamięci podręcznej i zatrzymując korzystanie z pamięci podręcznej przez wszystkie nowe zapytania. Po wyłączeniu buforowania można je później włączyć, nie tracąc przy tym żadnych wpisów przechowywanych w pamięci podręcznej.
Tymczasowe wyłączenie buforowania jest strategią przydatną, gdy podejrzewamy, że w pamięci podręcznej są przestarzałe wpisy, ale przed ich skasowaniem lub opróżnieniem całej pamięci podręcznej chcemy je zweryfikować. Jeśli się okaże, że dane w pamięci podręcznej są nadal właściwe, lub jeśli bezpiecznie skasujemy przestarzałe wpisy, to będziemy mogli spokojnie włączyć buforowanie. Jeśli trzeba, można przed włączeniem buforowania opróżnić cała pamięć podręczną lub tylko tę, która jest powiązana z określonym modelem biznesowym.
Dla każdej tabeli fizycznej można ustawić atrybut "Może być buforowane" pozwalający określić, czy zapytania dotyczące tej tabeli będą dodawane do pamięci podręcznej w celu udzielania odpowiedzi na przyszłe zapytania.
Jeśli dla tabeli zostanie włączone buforowanie, to każde zapytanie obejmujące tę tabelę będzie dodawane do pamięci podręcznej. Wszystkie tabele są domyślnie buforowane, lecz niektóre mogą nie być dobrymi kandydatami do umieszczenia w pamięci podręcznej, chyba że zostaną skonfigurowane odpowiednie ustawienia utrwalania pamięci podręcznej. Na przykład istnieje tabela, w której są przechowywane dane giełdowe, aktualizowane co minutę. Można określić, że wpisy dla tej tabeli mają być kasowane co 59 sekund.
Za pomocą ustawień utrwalania pamięci podręcznej można także określić, jak długo wpisy dla tej tabeli mają być przechowywane w pamięci podręcznej zapytań. Jest to przydatne w przypadku źródeł danych, które są często aktualizowane.
W narzędziu Model Administration Tool dwukrotnie kliknąć (w warstwie fizycznej) tabelę fizyczną.
Jeśli jest używane narzędzie Semantic Modeler, zob What Are a Physical Table's General Properties?.
W oknie dialogowym właściwości tabeli fizycznej dokonać na karcie "Ogólne" jednego z następujących wyborów:
Aby włączyć buforowanie, zaznaczyć pole wyboru Może być buforowane.
Aby zapobiec buforowaniu tabeli, wyczyścić pole wyboru Może być buforowane.
Aby określić czas, po którym wpis w pamięci podręcznej wygasa, określić Czas utrwalania pamięci podręcznej oraz jednostkę miary (dni, godziny, minuty lub sekundy). Jeśli wpisy w pamięci podręcznej nie mają automatycznie wygasać, wybrać opcję Pamięć podręczna nigdy nie wygasa.
Kliknąć OK.
Jeśli modele semantyczne są modyfikowane za pomocą narzędzia Semantic Modeler lub narzędzia Model Administration Tool, to dokonywane zmiany wpływają na wpisy przechowywane w pamięci podręcznej. Na przykład, jeśli zostanie zmieniona definicja obiektu fizycznego lub dynamicznej zmiennej modelu semantycznego, to wpisy w pamięci podręcznej, które odwołują się do tego obiektu lub tej zmiennej, mogą stać się niepoprawne. Zmiany te mogą wymagać opróżnienia pamięci podręcznej. Istnieją dwie sytuacje, o których należy pamiętać: zmiana istniejącego modelu semantycznego lub utworzenie (bądź wysłanie) nowego modelu semantycznego.
Zmiany w modelu semantycznym
Jeśli model semantyczny zostanie zmodyfikowany albo zostanie wysłany inny plik .rpd, to wszelkie zmiany wpływające na wpisy w pamięci podręcznej automatycznie powodują opróżnienie pamięci podręcznej ze wszystkich wpisów odwołujących się do zmienionych obiektów. Opróżnienie nastąpi, gdy zmiany zostaną wysłane. Na przykład, jeśli z modelu semantycznego zostanie usunięta tabela fizyczna, to - po zarejestrowaniu modelu - z pamięci podręcznej zostaną usunięte wszystkie wpisy odwołujące się do tej tabeli. Wszelkie zmiany dokonywane w modelu semantycznym w warstwie logicznej powodują opróżnienie pamięci podręcznej ze wszystkich wpisów dla tego modelu.
Zmiany w globalnych zmiennych modelu semantycznego
Wartości globalnych zmiennych modelu semantycznego są odświeżane na podstawie danych zwracanych przez zapytania. Definiując globalną zmienną modelu semantycznego, tworzy się blok inicjalizacyjny albo używa bloku już istniejącego, zawierającego zapytanie SQL. Można także skonfigurować harmonogram uruchamiania zapytania i okresowego odświeżania wartości danej zmiennej.
Jeśli wartość globalnej zmiennej modelu semantycznego zmieni się, to wszystkie wpisy w pamięci podręcznej, używające tej zmiennej w kolumnie, ulegną dezaktualizacji i - gdy dane z takiego wpisu będą znów potrzebne - zostanie wygenerowany nowy wpis w pamięci podręcznej. Stary wpis nie jest od razu usuwany z pamięci podręcznej, lecz pozostaje w niej, aż zostanie usunięty przez zwykły mechanizm czyszczenia pamięci podręcznej.
Jedną z głównych korzyści buforowania zapytań jest znacząca poprawa wydajności zapytań.
Buforowanie zapytań może być wykorzystywane do wypełnienia pamięci podręcznej poza godzinami szczytu poprzez uruchamianie zapytań i wprowadzanie ich wyników do pamięci podręcznej. Dobra strategia wypełniania pamięci podręcznej wymaga wiedzy, kiedy następują trafienia w pamięci podręcznej.
Zamierzając wypełnić pamięć podręczną dla wszystkich użytkowników, można użyć następującego zapytania:
SELECT User, SRs
Gdy pamięć podręczna zostanie wypełniona przy użyciu zapytania SELECT User, SRs
, następujące zapytania będą stanowić trafienia w pamięci podręcznej:
SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (użytkownikiem był USER1) SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (użytkownikiem był USER2) SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (użytkownikiem był USER3)
Omówiono tu następujące tematy:
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 |
Aby można było uznać za trafienie w pamięci podręcznej, muszą w buforowanym zapytaniu istnieć wszystkie kolumny z listy 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 |
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ż |
Klauzula |
Aby zapytanie mogło zostać zakwalifikowane jako trafienie w pamięci podręcznej, więzy klauzuli Klauzula
Dodatkowo kolumny, które są używane w klauzuli 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 ( |
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 |
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 |
Jeśli buforowane zapytanie eliminuje duplikaty za pomocą przetwarzania |
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ą |
Klauzula |
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 |
Jeśli jest używana strategia zabezpieczania bazy danych na poziomie wierszy (na przykład w wirtualnej prywatnej bazie danych - VPD), zwracane wyniki są zależne od uwierzytelnień autoryzacyjnych użytkownika.
Z tego powodu Oracle Analytics Cloud musi wiedzieć, czy dla źródła danych są używane zabezpieczenia bazy danych na poziomie wierszy oraz które zmienne są wrażliwe na zabezpieczenia.
Aby uzyskać pewność, że trafienia w pamięci podręcznej dotyczą tylko wpisów zawierających wszystkie zmienne wrażliwe na zabezpieczenia i są z nimi zgodne, trzeba w narzędziu Model Administration Tool poprawnie skonfigurować obiekt bazy danych i obiekty zmiennych sesyjnych, jak następuje:
Obiekt bazy danych. W warstwie fizycznej, wybrać na karcie "Ogólne" okna dialogowego "Baza danych" opcję Wirtualna prywatna baza danych, aby określić, że źródło danych używa zabezpieczeń bazy danych na poziomie wierszy.
Jeśli są używane zabezpieczenia bazy danych na poziomie wierszy i współdzielone buforowanie, trzeba wybrać tę opcję, aby zapobiec udostępnianiu wpisów z pamięci podręcznej, gdy zmienne wrażliwe na zabezpieczenia nie są zgodne.
Obiekt zmiennej sesyjnej. Dla zmiennych związanych z zabezpieczeniami należy w oknie dialogowym "Zmienna sesyjna" wybrać opcję Wrażliwe na zabezpieczenia, aby - gdy jest używana strategia zabezpieczania bazy danych na poziomie wierszy - zidentyfikować je jako wrażliwe na zabezpieczenia. Opcja ta powoduje, że wpisy w pamięci podręcznej są oznaczane przy użyciu zmiennych wrażliwych na zabezpieczenia, i włącza uzgadnianie tych zmiennych dla wszystkich przychodzących zapytań.
Jedną ze strategii maksymalizacji liczby potencjalnych trafień w pamięci podręcznej jest uruchomienie zestawu zapytań w celu wypełnienia pamięci podręcznej.
Poniżej są przedstawione niektóre zalecenia dotyczące typów zapytań do użycia podczas tworzenia zestawu zapytań, za pomocą których ma zostać wypełniona pamięć podręczna.
Typowe wstępnie przygotowane zapytania. Zapytania, które są typowo uruchamiane, a zwłaszcza kosztowne do przetworzenia, są doskonałymi zapytaniami do wypełniania pamięci podręcznej. Dobrymi przykładami typowych zapytań są te, których wyniki są osadzane w pulpitach informacyjnych.
Listy SELECT bez wyrażeń. Eliminując wyrażenia z kolumn z listy SELECT
, zwiększa się prawdopodobieństwo trafienia w pamięci podręcznej. Znajdująca się w pamięci podręcznej kolumna z wyrażeniem może zostać użyta do udzielenia odpowiedzi na nowe zapytanie z tym samym wyrażeniem; kolumna bez wyrażenia może zostać użyta do udzielenia odpowiedzi na zapytanie z dowolnym wyrażeniem. Na przykład przechowywane w pamięci podręcznej żądanie, takie jak:
SELECT QUANTITY, REVENUE...
może udzielić odpowiedzi na nowe zapytanie, takie jak:
SELECT QUANTITY/REVENUE...
lecz nie odwrotnie.
Brak klauzuli WHERE. Jeśli w buforowanym wyniku nie ma klauzuli WHERE
, to może on zostać użyty do udzielenia odpowiedzi na zapytania spełniające reguły trafienia w pamięci dla listy SELECT z dowolną klauzulą WHERE
zawierającą kolumny z listy rzutowania.
Zasadniczo najlepszymi zapytaniami do wypełnienia pamięci podręcznej są te, które znacząco wykorzystują zasoby przetwarzania bazy danych i które prawdopodobnie będą ponownie uruchamiane. Należy pamiętać, aby nie wypełniać pamięci podręcznej przy użyciu prostych zapytań, zwracających wiele wierszy. Takie zapytania (na przykład SELECT * FROM PRODUCTS
, gdzie PRODUCTS
jest mapowany bezpośrednio na jedną tabelę bazy danych) wymagają niewielkiego przetwarzania bazy danych. Ich kosztem są obciążenia związane z siecią i dyskiem, a tych pamięć podręczna nie łagodzi.
Oracle Analytics Cloud, gdy odświeża zmienne modelu semantycznego, bada modele biznesowe w celu stwierdzenia, czy odwołują się one do tych zmiennych. Jeśli tak, Oracle Analytics Cloud opróżnia całą pamięć podręczną dla tych modeli biznesowych. Zob. W jaki sposób zmiany dokonywane w modelu semantycznym wpływają na pamięć podręczną zapytań.
Można skonfigurować agenty do wypełniania pamięci podręcznej zapytań Oracle Analytics Cloud.
Wypełnienie pamięci podręcznej może skrócić czasy odpowiedzi dla użytkowników uruchamiających analizy lub wyświetlających analizy osadzone w pulpitach informacyjnych. Można to wykonać, planując agenty do uruchamiania żądań odświeżających te dane.
Jedyna różnica między agentami wypełniającymi pamięć podręczną a innymi agentami polega na tym, że te pierwsze czyszczą automatycznie pamięć podręczną i nie pojawiają się w alarmach na pulpicie informacyjnym.
Uwaga:
Agenty wypełniające pamięć podręczną usuwają z niej tylko w pełni zgodne zapytania, tak że nadal mogą w pamięci podręcznej istnieć zdezaktualizowane dane. Należy się upewnić, że strategia buforowania obejmuje opróżnianie pamięci podręcznej, ponieważ zapytania agentów nie uwzględniają zapytań doraźnych ani drążeń.Opróżniając pamięć podręczną, usuwa się z niej wpisy i zapewnia aktualność jej zawartości. Można włączyć automatyczne opróżnianie pamięci podręcznej dla określonych tabel, ustawiając - w narzędziu Model Administration Tool - odpowiedni Czas utrwalania pamięci podręcznej dla poszczególnych tabel.
Uwaga:
Jeśli jest używane narzędzie Semantic Modeler, zob. What Are a Physical Table's General Properties?
Jest to przydatne w przypadku źródeł danych, które są często aktualizowane. Na przykład, mając tabelę, w której są składowane dane z paska notowań giełdowych, aktualizowane co minutę, to za pomocą ustawienia Czas utrwalania pamięci podręcznej można zlecić automatyczne opróżnianie pamięci podręcznej z wpisów dla tej tabeli co 59 sekund. Zob. Buforowanie i czas utrwalania buforowania dla określonych tabel fizycznych.