W
projektach w których w pojedynczym datamarcie przechowywana jest
bardzo duża ilość danych często pojawiają się problemy z
wydajnością. Czasami można by pomyśleć: 'nie małym wysiłkiem
(kosztem) zbudowano hurtownie danych, a raporty i analizy wykonują
się wolno. Po co było to wszystko?…' Można, ale trzeba wziąć
pod uwagę że w takim przypadku baza danych bez hurtowni tym
bardziej nie miała by szans wykonać złożonych analiz. Czy można
coś w takim przypadku zrobić? Prawdopodobnie tak, wykorzystując
metody optymalizacji hurtowni danych istnieje duże
prawdopodobieństwo że wydajność da się znacznie poprawić.
Od
czego należy zacząć?
Architektura
– Warto zacząć od przeglądu mającego na celu sprawdzenie czy
wszystkie datamarty są budowane zgodnie ze sztuką (więcej na ten
temat).
Optymalizacja z użyciem narzędzi dostępnych na poziomie bazy danych. Dzisiejsze bazy danych oferują wiele rozwiązań umożliwiających optymalizację. Jeżeli jesteśmy pewni że nasza hurtownia jest zaprojektowana zgodnie ze sztuką, należy spróbować optymalizacji z użyciem narzędzi które dostarcza nam baza danych. Co mam na myśli? Indeksy, partycje, widoki zmaterializowane, itp. (więcej na ten temat).
Wyliczanie
miar kalkulowanych po stronie tabeli faktów. Często zdarza się
że problemy z wydajnością są spowodowane skomplikowanymi
zapytaniami mającymi na celu wyliczenie miar kalkulowanych.
Wyliczanie tego typu miar przez narzędzia ETL i przetrzymywanie ich
jako dodatkowe kolumny tabeli faktów może znacznie poprawić
wydajność (więcej na ten temat).
Tworzenie
tabel agregatów powalających na obniżenie ilości analizowanych
danych. Bardzo często zdarza się że tabela faktów przechowuje
informacje na bardzo wysokim poziomie szczegółowości. Jednak nie
wszystkie raporty które z niej korzystają potrzebują takiej
granuralności danych. W tego typu przypadkach warto stworzyć tabele
agregatów przechowujących dane mniej szczegółowe, przez co liczba
wierszy takiej tabeli znacznie się zmniejszy a wydajność z punktu
widzenia raportu zwiększy (więcej na ten temat).
Implementacja
kostek OLAP. Podstawą
większości systemów analitycznych są hurtownie danych. Dane
przechowywane są w tabelach ulokowanych na tradycyjnych serwerach
bazy danych. Najczęściej w architekturze płatków śniegu lub
gwiazd. Czy jest to dobre rozwiązanie? Zdecydowanie tak.
Architektura tego typu pozwala na optymalne wykorzystanie
tradycyjnych silników bazodanowych z punktu widzenia zadań
analitycznych. A czy da się zrobić coś więcej? (więcej na tentemat).
Zmiany
sprzętowe. Problemy z
wydajnością można próbować rozwiązywać poprzez usprawnienia
sprzętowe. Jednak w tym wypadku wypadało by się skonsultować z
doświadczonym administratorem. Osoba znająca system będzie
wiedziała czego brakuje: pamięci dyskowej, pamięci operacyjnej,
lub mocy procesora. Często pomaga również zamiana dysków serwera
na SSD. Jednak należy pamiętać o ich ograniczeniach. Dyski SSD
mają ograniczoną ilość zapisów jakich mogą dokonywać. Na
jednym ze szkoleń słyszałem o przypadku w którym dysk SSD został
umieszczony w miejscu w którym zapisy były tak częste że ich
limit został przekroczony po kilku dniach pracy serwera.
Inne
sztuczki. Często narzędzia w
których budujemy analizy i raporty posiadają wbudowane mechanizmy
służące do optymalizacji. Chociażby mechanizmy pamięci
podręcznej przechowujące wyniki ostatnich zapytań do bazy.
Pozwalają zaoszczędzić czas w momencie kiedy używamy ponownie
tego samego zapytania. Z użyciem tego mechanizmu można pokusić się
o implementację sztuczki zwanej: 'cache heating'. Wyobraźmy
sobie sytuacje w której istnieje zasobożerny raport, bardzo ważny
dla użytkownika, uruchamiany co dziennie około godziny 8 rano.
Raport jest na tyle skomplikowany że wyniki pojawiają się dopiero
po kilku minutach od uruchomienia. Korzystając z mechanizmu cache
heating, można zaimplementować automat do wywoływania raportu o
godzinie 7:30, dzięki czemu w momencie wywołania raportu przez
użytkownika (ok godziny 8-ej) dane będą dostępne w
pamięci podręcznej i wynik
pojawi się natychmiast.
Ciekawy artykuł. Pozdrawiam.
OdpowiedzUsuń