Star Transformation
Star Transformation jest metodą łączenia tabel używaną w środowiskach hurtowni danych w celu podniesienia wydajności wykonywania zapytań. Ta metoda zastępuje tradycyjne sposoby łączenia tabel : nested loops, sort merge join i hash join. Metoda Star Transformation jest dostępna od wersji 8i Oracle.
Schemat „Star”
Schemat gwiazdy jest najprostszym
schematem hurtowni danych. Nazwa pochodzi od konstrukcji samego
schematu, przypomina ona nieco kształt gwiazdy. W tym schemacie mamy
jedną tabelę faktu , stanowiącą centralny element schematu, oraz
przynajmniej dwie tabele wymiarów będące rozszerzeniami tabeli
faktu.
W przypadku wykonania zapytania korzystającego z takich tabel, przeprowadzone zostanie łączenie każdej z tabel rozszerzeń z tabelą faktu. Tabele nie łączą się między sobą. Na powyższej ilustracji tabelę faktu stanowi tabela „zamówienia” , natomiast tabele rozszerzeń (wymiarów) stanowią wszystkie pozostałe.
Schemat „Snowflake”
W bazach danych
możemy się spotkać również ze schematami typu „Snowflake”,
które są rozwinięciem schematu „Star”.
Star Query
Ideą Star Transformation jest
zmniejszenie ilości full table skanów dużych tabelach – w tym
przypadku na tabeli faktu – sales. W typowych zapytaniach na
strukturze gwiazdy duża tabela faktu jest łączona z wielokrotnie
mniejszymi tabelami rozszerzeń. Tabela faktu ma zazwyczaj po jednym
kluczu obcym dla każdej tabeli rozszerzenia.
select
ch.channel_class,cu.cust_city,t.calendar_year,sum(s.amount_sold)
suma_sprzedazy
from
sales
s,channels ch,customers cu, times t where
s.time_id=t.time_id
and ch.channel_id=s.channel_id
and
s.cust_id=cu.cust_id
and
channel_class in ('Direct','Internet')
and
cust_state_province='CA' and t.calendar_year ='1998'
group by
ch.channel_class,cu.cust_city,t.calendar_year;
Bez stosowania Star Transformation,
łączenie przebiega w taki sposób, że tabela faktu (w tym
przypadku tabela Sales) jest łączona osobno z każdą z tabel.
Mimo, że w efekcie końcowym zapytania zostanie wyświetlona bardzo
nieznaczna część tabeli sales, przeprowadzany jest na niej full
scan. Im większa jest tabela faktu, tym większa utrata wydajności.
Przyjrzyjmy się sposobowi wykonania tego zapytania w „tradycyjny”
sposób:
Tabela zawiera
prawie milion wierszy:
Sam wynik
zapytania dotyczy jednak jedynie 11 wierszy. Oczywiście wymagane
było połączenie tabeli sales z tabelami channels,times i
customers, jednak wykonywanie w tym celu full scana jest bardzo
nieefektywne.
Star Transformation
Optymalizator
kosztowy rozpoznaje takie struktury i stosuje dla zapytań na nich
specjalnie zoptymalizowane plany wykonania przy użyciu metody Star
Transformation. Aby jednak było to możliwe, musi zostać spełnione
kilka warunków:
- na kluczach obcych tabeli faktu powinny zostać założone indeksy bitmapowe. W tym przypadku osobne indeksy bitmapowe powinny zostaćzałożone na kolumnach: channel_id,time_id,cust_id tabeli sales.
- Parametr STAR_TRANSFORMATION_ENABLED musi być włączony dla sesji lub bazy danych.
- Muszą być przynajmniej dwie tabele wymiarów i jedna tabela faktu.
- Statystyki wszystkich obiektów biorących udział w zapytaniu muszą być świeże.
Kiedy te warunki
będą spełnione, optymalizator kosztowy będzie automatycznie
wybierał metodę Star Transformation która jest bardzo efektywna
dla zapytań typu star query (tj. takich jak omawiane wcześniej).
Dla użytkownika fakt zmiany metody wykonywania zapytania jest
niezauważalny (poza przyspieszeniem :) ). Zastosowanie Star
Transformation nigdy nie doprowadzi do odmiennych niż pierwotne
wyników zapytania.
Sposób działania Star
Transformation
W jaki sposób
działa metoda Star Transformation? Przebiega zasadniczo w dwóch
fazach.
W pierwszej fazie,
system stosuje filtry na tabeli rozszerzeń i określa wartości
klucza głownego dla wybranych wierszy. W drugiej fazie mając już
ograniczone dane z tabeli rozszerzenia, system przeszukuje indeksy
bitmapowe założone na kluczach obcych tabeli faktu w celu wybrania
tylko niezbędnych wierszy z tabeli faktu.
Przeprowadzimy
teraz testy. Włączam parametr star_transformation_enabled dla sesji
i ponawiam generowanie planu wykonania dla tego samego zapytania:
alter
session set star_transformation_enabled=true;
select
ch.channel_class,cu.cust_city,t.calendar_year,sum(s.amount_sold)
suma_sprzedazy
from
sales s,channels ch,customers cu, times t where
s.time_id=t.time_id
and ch.channel_id=s.channel_id
and
s.cust_id=cu.cust_id and channel_class in ('Direct','Internet')
and
cust_state_province='CA' and t.calendar_year ='1998'
group
by ch.channel_class,cu.cust_city,t.calendar_year;
Róznica polega przede wszystkim na sposobie dostępu do danych z tabeli faktu:
Porównajmy z wcześniejszym sposobem dostępu:
Należy
pamiętać, że im większa jest tabela faktu , tym większy koszt
generuje full table scan. Wynika to z większej ilości danych które
trzeba odczytać. Im więc tabela faktu jest większa, tym bardziej
opłacalna z punktu widzenia optymalizacji jest implementacja metody
Star Transformation.
Podczas
wykorzystania metody Star Transformation, następuje dwukrotny dostęp
do tabel rozszerzeń. Po jednym razie dla każdej z dwóch faz
wykonywania tej metody. Jeśli optymalizator kosztowy uzna to za
opłacalne z punktu opłacalności, system utworzy tabelę tymczasową
zawierającą odfiltrowane dane i będzie z niej korzystał zamiast
wielokrotnego dostępu do tabeli rozszerzenia.
Testy były
przeprowadzane na schemacie SH , który jest dostarczany jako schemat
przykładowy razem z samą bazą. Wystarczy jedynie odblokować konto
SH i ustawić mu hasło.
Brak komentarzy:
Prześlij komentarz