OLAP w praktyce

advertisement
OLAP w praktyce
Szymon Słupik
dyrektor ds. technologii
CDN S.A. grupa Comarch
CDN XL – nasz flagowy produkt
CDN XL – nasz flagowy produkt

Podsystem „Controlling”






Rozwiązanie klasy Business Intelligence
100% implementacji w oparciu o Microsoft Analysis
Services 2000
Ponad 70 wymiarów współdzielonych
Kilkanaście kostek dziedzinowych
Pełna implementacja zapisu do kostek (writeback)
Dział aplikacji Business Intelligence

Hurtownie danych <pod klucz>, powiązane z
systemami analitycznymi opartymi o Microsoft
Analysis Services
Plan
 Optymalizacja
konstrukcji kostek
OLAP
 Wymiary,
fakty i schemat gwiazdy
 Wymiar czasu
 Optymalizacja
 Zarządzanie
pracy serwera OLAP
pamięcią
 Agregacje
 Bezpieczeństwo
danych
Wymiary: prywatne i współdzielone

Wymiary – prywatne czy współdzielone?


Prywatne – są zawsze przetwarzane z kostką
Współdzielone – procesowane wtedy, gdy jest to
konieczne
Hierarchie – czy warto?
 Zalecenie: wymiary współdzielone z hierarchiami




Nie da się zmienić prywatnego na współdzielony
Decydując się na wymiar prywatny trudno przewidzieć
czy kiedyś nie będzie potrzeby wykorzystania go w
kilku kostkach
Zmiana nazwy wymiaru (wprowadzenie hierarchii) jest
kosztowna (przeróbki istniejących raportów)
Wymiary - konstrukcja

Gdzie nas obciążają?



Jak optymalizować?



Pamięć
Etap procesowania kostek (JOINy do faktów)
Unikalne klucze (member keys)
Klucze numeryczne, nie znakowe
Wymiary wielopoziomowe / hierarchie



Pełny płatek śniegu
Osobne tabele dla każdego poziomu
Więzy integralności – programowanie defensywne
Wymiar czas – podejście tradycyjne

Kolumna <datetime> w tabeli faktów


Zalety



Wizard automatycznie buduje wymiar czasu
Prostota rozwiązania, wsparcie w narzędziach
Metoda podawana na większości szkoleń dla
początkujących
Wady



Budowa wymaga skanowania całej tabeli faktów
Brak osi czasu dla prognoz / budżetowania
Problemy związane z funkcją ParallelPeriod

Gdy rok nie zaczyna się od 1go stycznia
Wymiar czas – podejście profesjonalne

Osobna tabela np. WYM_Czas
 Generowana procedurą składowaną

sp_generuj_czas <od> <do>

Relacja FKT.Dzien_ID<<->WYM_Czas.Dzien_ID
 Zalety




Możemy wygenerować oś czasu za dowolny okres
Unikamy problemów z ParallelPeriod
Mamy podstawę czasu do prognozowania i
budżetowania
Wady

Większa komplikacja rozwiązania
Wymiar czas: po polsku
Optymalizacja schematu

W hurtowni danych


Indeks na każdym PK i FK
W serwerze OLAP

“Optimize Schema” w celu minimalizacji JOINów
SELECT Dim1.dim1key,
SELECT FactTable.dim1key,
Dim2.dim2key,
FactTable.dim2key,
Dim3.dim3key,
FactTable.dim3key,
FactTable.meas1,
FactTable.meas1,
FactTable.meas2,
FactTable.meas2, FROM
FROM
FactTable,
FactTable
Dim1,
Dim2,
Dim3
WHERE (FactTable.dim1key=Dim1.dim1key) AND
(FactTable.dim2key=Dim2.dim2key) AND
(FactTable.dim3key=Dim3.dim3key)
Optymalizacja schematu kostki

Jest możliwa gdy…




Wymiar jest współdzielony
Kolumna „Member Key” na najniższym poziomie
wymiaru jest zgodna z kluczem zastosowanym w
tabeli faktów
Kolumna „Member Key” na najniższym poziomie jest
unikalna
Najniższy poziom wymiaru w kostce nie jest
wyłączony (disabled)
Optymalizacja agregacji

Wymiary - Depends on Dimension property



W edytorze wymiarów
Wpływa na optymalizację agregatów wymiarów
zależnych
Kostki - usage-based optimization



Serwer zapisuje dziennik zapytań (query log)
Usage-based optimization kreuje najefektywniejszy
zestaw agregatów używanych dla większości zapytań
Błąd konstrukcyjny – w przypadku >64 wymiarów
Co mamy w pamięci?

Wymiary…





…są ładowane do pamięci przy starcie serwera
…wszystkie 
…ze wszystkich baz na serwerze 
…razem z właściwościami (member properties) 
Jak sobie z tym radzić?



Uważać na member properties - np. URL:Char(256)
Odpinać nieużywane bazy (np. kopie testowe itp.)
Wymiary wirtualne nie obciążają pamięci

Są agregowane w locie, niezła wydajność przy niskiej
kardynalności (niewiele elementów)
Procesowanie kostek

Faza bazowa




Faza indeksowania


Odczytuje dane z serwera SQL
Sortuje dane w pamięci
Zapisuje dane w 64 KB segmentach na dysku
Odczytuje segmenty danych i buduje indeksy
Faza agregacji


Budowa agregatów w pamięci
W przypadku braku pamięci wykorzystanie pliku TMP
Co mamy w pamięci?

Bufor procesowania


Zwiększa wydajność wszystkich faz procesowania
W fazie bazowej akumuluje rekordy



Faza indeksacji i agregacji



Zwiększa ilość wierszy w segmencie
Pozwala na lepszą kompresję danych
Więcej pamięci do wyliczania agregatów
Zmniejsza wykorzystanie plików tymczasowych
Ustawiany we właściwościach serwera
Co mamy w pamięci?

O ile zwiększać bufor procesowania
 Za duży powoduje paging pamięci (OS)
 Za mały generuje pliki tymczasowe (AS)
Pamięć serwera Analysis Services
Wymiary
Bufor Procesowania
Bufor
Read Ahead
Miara <Distinct Count>

Distinct Count jest miarą nieaddytywną


Podstawowa zasada – nie mieszać



Na każdym poziomie musi być wyliczana na
podstawie faktów bazowych i tam jest zapamiętywana
Dodanie miary DC do kostki mającej inne miary
powoduje eksplozję agregatów
Dla miar DC robimy oddzielne, dedykowane kostki,
spinane z kostką główną poprzez mechanizm kostek
wirtualnych
Ograniczenie

W kostce może być tylko 1 miara DC
Metoda przetwarzania kostek

Process database




Przetwarza całą bazę danych, w jednej transakcji
Zalecana metoda
Wymaga 2xRAM, 2xDysk
Process dimension + process cube


Przetworzenie wymiaru może skutkować inwalidacją
kostek i brakiem dostępności danych analitycznych
Dobra metoda do diagnostyki problemów
Hurtownia i kostki (teoria)

Na jednej maszynie





+ Brak konieczności transferu danych przez sieć
+ Hurtownia nie obciąża serwera OLTP
- Rywalizacja o zasoby między SQL i OLAP
Należy ręcznie ustawić obszar pamięci SQL
Na osobnych maszynach



- Transfer danych przez sieć (ale sieci są szybkie )
- Hurtownia obciąża serwer OLTP (ale w nocy )
+Brak rywalizacji o zasoby między SQL i OLAP
Hurtownia i kostki (praktyka)

Doświadczenia z instalacji produkcyjnych




OLAP bardzo obciąża serwer, zwłaszcza w procesie
przetwarzania
Dokładnie w tym samym czasie dociążany jest serwer
SQL (bardzo złożone zapytania, generujące długie
resultsety)
Silna rywalizacja o pamięć – często kończy się
nadmiernym pagingiem
Warto rozważyć jeden wspólny serwer dla OLTP i
hurtowni

W typowej firmie każda z tych baz jest dociążana w innym
okresie (OLTP w ciągu dnia, hurtownia w nocy).
Windows 2003 Server

Wstępne wyniki testów (w laboratoriach Comarch-CDN)




Wyraźny wzrost wydajności serwera SQL 2000 pracującego na
platformie Windows 2003 Server
Duży wzrost wydajności aplikacji przetwarzających dane,
pracujących na Windows 2003 Server
W pewnych scenariuszach obserwujemy wypadkowy wzrost
wydajności (serwer SQL + aplikacja) rzędu 200% i więcej
Oficjalne dokumenty Microsoft


Usprawnione mechanizmy schedulera, podsystemu I/O,
adresowania AWE
http://www.microsoft.com/sql/techinfo/planning/winsvr2003benefit
s.asp
Bezpieczeństwo danych





Model bezpieczeństwa oparty o Active Directory
Koncepcja ról rzutowanych na użytkowników /
grupy
Role definiowane na poziomie bazy danych
Przypisywanie ról do kostek
Mechanizmy uprawnień




Przypisanie roli do poszczególnych kostek
Definiowanie wycinka wymiaru dostępnego dla roli
Cell security – dla wymagających
Testowanie ról
Pamięć a dimension security

W pamięci umieszczane są cieniowe kopie
wymiarów





Po jednej kopii dla każdej roli zawierającej
<dimension security>
Kopia zawiera elementy dozwolone oraz ich
poprzedników (ancestors)
Pojawia się w pamieci w momencie podłączenia się
pierwszego użytkownika korzystającego z roli
Zostaje w pamięci do momentu procesowania kostki
(lub restartu serwera)
Scenariusz kostek połączonych (Linked Cubes)
Podsumowanie

Dobre przygotowanie aplikacji opartej o
Microsoft Analysis Services wymaga

Znajomości praw fizyki


Dobrego zaplanowania fundamentów



Schemat gwiazdy
Schemat nazewnictwa wymiarów
Defensywnego podejścia do projektu



Np. czym się różni pamięć RAM od dysku
Więzy integralności
Diagnostyka błędów
Iteracyjnego rozwoju

Monitorowanie  Zmiany  Testy  Monitorowanie  …
Na koniec: ciekawostka

sp_addlinkedserver
@server = ‘LinkedOLAP',
@provider = 'MSOLAP‘,
@provstr= 'Data Source=MyServer;
Initial Catalog=MyOlapDb;',
@srvproduct = ''

SELECT * FROM OPENQUERY(LinkedOLAP,
'SELECT
[Kontrahent.Akwizytor:Akronim],
Sum ([Przychód])
FROM
[Analiza Sprzedaży]
WHERE
[Czas.Kalendarzowy:Rok]=2003
GROUP BY
[Kontrahent.Akwizytor:Akronim]')
Bibliografia

The Data Warehouse Lifecycle Toolkit


microsoft.public.sqlserver.olap


Rozdział 26
White papers (http://msdn.microsoft.com/)


msnews.microsoft.com
SQL Server 2000 Resource Kit


Ralph Kimball
Analysis Services: Optimizing Cube Performance Using Microsoft
SQL Server 2000 Analysis Services
MSDN
Download