Wielu klientów doświadcza problemów z wydajnością w aplikacjach hurtowni danych. W niektórych przypadkach zapytania SQL generowane przez Oracle Analytics są złożone i przez to trudne do przeanalizowania. W tym temacie zawarto pewne wskazówki dotyczące analizowania i minimalizowania problemów z wydajnością, które mogą wynikać z zapytań SQL generowanych przez Oracle Analytics.
Ten temat nie obejmuje sytuacji pogorszenia wydajności wynikających z problemów dotyczących sieci, przeglądarki czy prezentowania raportów.
Analiza dziennika zapytań dotyczącego Oracle Analytics (wymagany poziom 3 rejestrowania w dzienniku)
Aby uzyskać informacje na temat tego, jak znaleźć ten dziennik lub jak interpretować jego zawartość, zob. Gromadzenie i analizowanie dzienników zapytań.
- Porównać czas spędzony przez zapytanie w Oracle Analytics z czasem spędzonym w bazie danych, czyli inaczej czas odpowiedzi z fizycznym czasem trwania zapytania. Zwykle czas spędzony w Oracle Analytics nie przekracza kilku sekund.
- Jeśli czas odpowiedzi jest dłuższy niż kilka sekund, przeanalizować poszczególne etapy realizowane w Oracle Analytics, aby dowiedzieć się, jaka jest tego przyczyna (wymagany poziom 5 rejestrowania w dzienniku).
Analiza fizycznego zapytania SQL
- Sprawdzić, czy wszystkie tabele uwzględnione w zapytaniu są niezbędne. Poszukać tabel, które są złączone, ale nie są uwzględnione w klauzuli
SELECT
i nie mają zastosowanych żadnych filtrów (rzeczywistych filtrów, a nie warunków złączenia).
- Ustalić, ile fizycznych zapytań i zapytań podrzędnych jest generowanych. Dokładniej rzecz biorąc, chodzi o to, ile razy zapytanie odczytuje tabelę faktów. W idealnej sytuacji zapytanie odczytuje tylko jedną tabelę faktów i tylko jeden raz. W przypadku, gdy istnieje więcej niż jedna tabela faktów, dowiedzieć się, dlaczego tak jest i czy można usunąć niektóre z tabel.
- Sprawdzić, czy nie występują wykluczone kolumny, nieaddytywne reguły agregacji (
REPORT_AGGREGATE
, count(distinct)...
), etapy wyboru, zapytania podrzędne w raporcie, operatory zbiorów (UNION
), sumy, sumy częściowe, wielokrotne widoki itd.
- Sprawdzić, czy nie występują jakieś złączenia zewnętrzne. Jeśli występują, dowiedzieć się, jakie jest ich źródło i czy można usunąć niektóre z nich poprzez zmodyfikowanie projektu.
Analiza planu wykonywania
Jeśli optymalizacja zapytań SQL jest niewystarczająca, należy przeanalizować plan wykonywania, aby znaleźć główną przyczynę problemu z wydajnością. O pomoc należy poprosić administratora bazy danych (DBA). Na tym etapie do dyspozycji są cztery podstawowe metody poprawiania wydajności:
- Ograniczenie wolumenu wywołań we-wy poprzez poprawienie ścieżek dostępu do danych (indeksów).
- Ograniczenie wolumenu wywołań we-wy poprzez zmniejszenie objętości odczytywanych danych. Można na przykład przejrzeć zastosowane filtry lub strukturę modelu danych (więcej informacji na ten temat znajduje się w następnej sekcji).
- Zwiększenie stopnia równoległości (liczby wątków używanych do odczytu dużych tabel).
- Zwiększenie szybkości wywołań we-wy (poprzez poprawienie infrastruktury, użycie bazy danych działającej w pamięci itp.).
Przejrzenie i poprawienie modelu danych w celu zmniejszenia objętości odczytywanych danych
- Utworzyć tabele agregacji.
- Zastosować fragmentację.
Na przykład jeśli użytkownicy najczęściej wybierają dane z bieżącego roku, kwartału lub miesiąca, można podzielić dany fakt na dwie tabele: bieżącą i archiwalną. W przypadku bazy danych Oracle można także zastosować partycjonowanie.
- Zastosować denormalizację w celu ograniczenia liczby złączeń.
- Porozdzielać tabele w celu zmniejszenia liczby kolumn.
Objętość odczytywanych danych nie zależy jedynie od liczby wierszy w każdej z tabel. Objętość danej tabeli zależy również od liczby i rozmiarów jej kolumn. Na przykład można podzielić dużą tabelę mającą 500 kolumn na dwie tabele, jedną zawierającą 50 najczęściej używanych kolumn i drugą, zawierającą pozostałe 450 kolumn, które są rzadko używane.
Wiele problemów z wydajnością w Oracle Analytics wynika z nieprawidłowego projektu, ponieważ taki projekt powoduje generowanie nieoptymalnych zapytań SQL. Modyfikując projekt, można poprawić zapytania SQL generowane przez Oracle Analytics. Może to mieć ogromny wpływ nie tylko na wydajność raportów, ale również na ilość zasobów używanych w bazie danych.