czwartek, 29 grudnia 2016

Optymalizacja hurtowni danych, czyli nie magia a konkretne kroki.

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.

1 komentarz: