Równoległe bazy danych

Im większa baza danych, tym większe trudności ma system zarządzania bazami danych i tym większe wymagania sprzętowe dla obsługującego ją komputera.

Im większa baza danych, tym większe trudności ma system zarządzania bazami danych i tym większe wymagania sprzętowe dla obsługującego ją komputera.

Mniej więcej 5 lat temu typowa baza danych przedsiębiorstwa miała rozmiar od kilku do kilkudziesięciu megabajtów; rzadkością były bazy o rozmiarze gigabajtowym. Obecnie typowa baza ma 1-10 GB a tempo przyrostu jej rozmiaru jest imponujące. Znana mi baza danych niezbyt dużego przedsiębiorstwa handlu hurtowego ma rozmiar ok. 2 GB i przyrasta w tempie 8 MB dziennie. Bazy o rozmiarze ponad 100 GB stają się równie częste jak 5 lat temu bazy 100 MB. Oto rozmiar postępu technologicznego w zakresie przyrostu mocy obliczeniowej, zmniejszającej się ceny dysków i zwiększających się możliwości systemów zarządzania bazami danych.

Jednakże nawet najpotężniejsze systemy zarządzania bazami danych mają kłopoty z obsługą baz o takich rozmiarach, zwłaszcza, że wiele z tych baz zawiera jedynie niewielką liczbę tabel o ogromnej liczbie rekordów. Spotyka się już bazy mające w jednej tabeli 100 mln rekordów!

Producenci systemów zarządzania bazami danych już dawno zauważyli problem narastających lawinowo baz i niewydolności ich systemów. Współpraca z producentami sprzętu zaowocowała pojawieniem się systemów zarządzania bazami danych, określanych mianem równoległych. Aby jednak dokładniej móc określić co to właściwie znaczy, trzeba odwołać się do konstrukcji komputerów równoległych.

Sprzętowa równoległość

Istnieje wiele odmian równoległych architektur komputerów; często uważa się (niesłusznie), że jedyne warte rozważania konstrukcje z wieloma procesorami, to systemy ściśle sprzężone o symetrycznym przetwarzaniu równoległym (SMP) i luźno sprzężone masowo równoległe (MPP). Co gorsza niektórzy producenci zaciemniają obraz proponując konstrukcje określane mianem "równoległych", bez podawania co ta równoległość oznacza. Pojęcie równoległości zostało zresztą dość sztucznie uogólnione na komputer z pojedynczym procesorem: jeśli mogą na nim działać aplikacje wielowątkowe, to uważa się, że są one wykonywane równolegle (mimo że w rzeczywistości wątki są wykonywane kolejno).

Nie można prosto zwiększyć wydajności komputera przez proste dodanie procesorów. Istnieje kilka powodów ku temu. Kolejny procesor można wykorzystać do uruchomienia na nim kolejnego procesu (części aplikacji lub systemu operacyjnego); jednakże wymaga to obsługi przez ten procesor, który zajmuje się koordynacją działania procesów. Im więcej procesów, tym większe obciążenie koordynatora i tym mniejsze wykorzystanie mocy procesorów. Drugi powód to taki, że procesory będą ze sobą konkurować w dostępie do pamięci, kanałów wejścia/wyjścia i innych wspólnych zasobów.

Ostatni i wydaje się, że najbardziej znaczący powód malejącego przyrostu wydajności ze wzrostem liczby procesorów, to ograniczenia w programowaniu. Nawet jeśli udałoby się tak podzielić aplikację na tyle procesów (lub wątków), aby każdy z procesorów był w pełni zajęty, pojawi się problem synchronizacji i korzystania z wyników obliczeń. Jest mało prawdopodobne, aby procesy dostarczały wyników dokładnie w tym momencie, gdy są potrzebne. Jakiś proces będzie musiał czekać na wyniki z innego procesu, co spowoduje niewykorzystanie mocy procesorów.

SIMD i MIMD

Teoretyczne architektury równoległe dzielą się na dwie klasy. SIMD (Single Instruction, Multiple Data - pojedyncza instrukcja, wiele danych) oznacza, że na wielu ciągach danych wykonuje się te same instrukcje. MIMD (Multiple Instruction, Multiple Data - wiele instrukcji, wiele danych) oznacza, że na każdym ciągu danych wykonuje się różne instrukcje. W praktyce obliczeń technicznych spotyka się konstrukcje SIMD; w zastosowaniach komercyjnych przeważają różne formy MIMD.

Wspólne lub rozdzielone zasoby

Jeżeli procesory korzystają wspólnie ze wszystkich dostępnych zasobów na równych prawach (pamięć RAM, dyski, kanały we/wy) - nawet jeśli każdy z procesorów ma dostęp do własnej pamięci podręcznej (cache) - to jest to jakaś odmiana typowej konstrukcji o symetrycznym przetwarzaniu równoległym (SMP). Producenci sprzeczają się co do "prawdziwej" symetryczności lub tylko symetryczności, ale dla użytkownika komercyjnego nie ma to większego znaczenia. Obecne systemy operacyjne są w stanie obsługiwać od 4-8 procesorów (Windows NT), 12 (HP UX 10.0), aż do ok. 30 (specjalne odmiany Unixa).

Jeżeli procesory nie mają żadnych wspólnych zasobów, a komunikują sobie jedynie wyniki obliczeń przez specjalną szybką szynę, przełączniki szyny czy inny rodzaj łącza, to jest to typowa konstrukcja o masowym przetwarzaniu równoległym (MPP). Trywializując można powiedzieć, że na problem "rzucamy" tyle procesorów, ile potrzeba. Każdy z procesorów korzysta z własnej kopii systemu operacyjnego, własnej kopii systemu zarządzania bazami danych, własnych aplikacji.

Konstrukcja pośrednia sprowadza się do wspólnego korzystania z zasobów dyskowych, dołączonych do wspólnej szyny SCSI lub kanału światłowodowego (Fibre Channel) oraz całkowicie rozdzielnego wykonywania obliczeń, korzystając z indywidualnych kopii systemu, aplikacji i jakiejś części (lub całości) wspólnych danych, zapisanych jako pojedyncza kopia na wspólnych dyskach. Jest to typowe grono komputerów (cluster). Systemy te wymagają tzw. Distributed Lock Managera, zarządzającego dostępem do plików na wspólnych dyskach i przesyłającego dane do pamięci podręcznej (cache) poszczególnych węzłów. Na ogół jako węzeł w konstrukcji grona może występować komputer SMP.

Równoległe bazy danych

System zarządzania bazami danych może wykonywać pewne operacje równolegle, nawet na komputerze mającym tylko jeden procesor. Procesor komputera jest zawsze znacznie szybszy niż sterowniki dysków. Dla odczytania danych z dysku procesor inicjuje operację we/wy i czeka na wynik. Jeżeli jednak komputer jest wyposażony w więcej dysków i więcej niż jeden kontroler dysków, to operacje odczytu bazy do pamięci może wykonywać równolegle. Jest to jednak równoległość ograniczona rozmiarem pamięci (ile danych można do niej odczytać) i liczbą sterowników/dysków.

Skalowalna baza danych jest w stanie korzystać z możliwości jakie oferuje sprzęt równoległy w sposób niewidoczny dla użytkownika. Niezależne transakcje można wykonywać przy użyciu różnych procesorów. Można także większą transakcję rozbić na mniejsze części składowe, wykonywane przez różne procesory.

W przypadku dużych, złożonych transakcji, które trudno jest rozdzielić na mniejsze, systemy baz danych stosują różne strategie ich wykonywania. Optymalizator bazy określa tzw. plan wykonania transakcji (często dostępny dla programisty w postaci pliku tekstowego), tworzy zbiór zadań do wykonania i przydziela je do dostępnych procesorów. Wyniki wykonania poszczególnych zadań są ze sobą łączone w celu uzyskania wyniku ostatecznego. Możliwości zrównoleglania operacji są ograniczone przez liczbę zadań, na jakie daje się rozdzielić zapytanie oraz obecnością poleceń SQL takich jak GROUP BY lub SORT, wymagających dostępności wszystkich wyników pośrednich.

Jeżeli dostępne jest więcej niż jedno źródło danych (np. w zapytaniu biorą udział dwie tabele), operacje na nich mogą wykonywać różne procesory (procesy lub wątki).

Wszystkie te metody zrównoleglania można wykonywać zarówno na sprzęcie SMP, jak i MPP. Jednakże algorytmy nadające się dobrze do realizacji na sprzęcie SMP nie sprawdzają się na ogół na sprzęcie MPP i odwrotnie. Dlatego producenci baz danych dostarczają na ogół inne wersje swych systemów dla każdego z tych rodzajów sprzętu. Wyjątkiem jest Informix, który w swym nowym systemie Informix OnLine Dynamic Server 8.0 MPP, dostępnym pod koniec br., przewiduje jedną wersję bazy dla sprzętu SMP i MPP.

Jak przyspieszyć operacje?

Największe zyski w szybkości operacji na bazach uzyskuje się przez przyspieszenie operacji we/wy. Z tego powodu, jako serwery baz danych stosuje się komputery pozwalające na używanie wielu logicznych partycji dyskowych (wielu dysków fizycznych), na które zapisuje się dane z bazy w sposób zapewniający zwiększoną wydajność we/wy.

Istnieje kilka metod rozdzielania danych na partycje dyskowe. Najprostsza metoda polega na przydzielaniu rekordów bazy kolejno na kolejne partycje. Daje niezłe, równomierne rozmieszczenie.

Najczęściej stosowana metoda polega na korzystaniu z tzw. funkcji mieszających (hash functions), w której na podstawie zawartości rekordu wylicza się, na której partycji należy go umieścić. Dobry algorytm mieszania rozmieszcza dane równomiernie na wszystkich partycjach, pod warunkiem, że dane są względnie unikalne. Jeżeli jest wiele powtarzających się wartości - trafią do tej samej partycji. Spowoduje to zwiększony rozmiar tabel na tej partycji i obniżenie wydajności bazy.

Kolejna metoda polega na umieszczaniu danych w partycji na podstawie zakresu danych (wszystkie osoby z nazwiskiem od A do F na partycji A, od G do K - na partycji B itd.). Nie nadaje się do pewnych rodzajów danych (np. współpracujemy tylko z firmami o nazwach zaczynających się od litery A, G, H).

Metoda partycjonowania stosowana przez Sybase Navigation Server polega na przydzielaniu danych do określonej partycji całymi tabelami. Może to oznaczać, że duże zbiory danych znajdą się na jednej partycji, podczas gdy inne będą prawie puste.

Informix pozwala na rozdział danych na partycje zgodnie z zasadami, zdefiniowanymi przez użytkownika (klienci polscy do jednej partycji, zagraniczni do innej itp.). W celu uzyskania dobrego równomiernego rozkładu danych i stworzenia dobrej reguły rozkładu, trzeba dokładnie znać strukturę danych w bazie.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200