Metody skrócenia czasu wykonywania fazy regeneracji krotek podczas realizacji złączeń w pamięci operacyjnej

Podobne dokumenty
Optymalizacja poleceń SQL Metody dostępu do danych

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Architektura komputerów

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wykład XII. optymalizacja w relacyjnych bazach danych

Zrównoleglenie i przetwarzanie potokowe

Architektura komputerów

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Logiczny model komputera i działanie procesora. Część 1.

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Teoretyczne podstawy informatyki

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Haszowanie (adresowanie rozpraszające, mieszające)

Przykładem jest komputer z procesorem 4 rdzeniowym dostępny w laboratorium W skład projektu wchodzi:

Budowa komputera Komputer computer computare

Baza danych. Baza danych to:

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Administracja i programowanie pod Microsoft SQL Server 2000

Alicja Marszałek Różne rodzaje baz danych

Optymalizacja zapytań. Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

Indeksy w bazach danych. Motywacje. Techniki indeksowania w eksploracji danych. Plan prezentacji. Dotychczasowe prace badawcze skupiały się na

Budowa i zasada działania komputera. dr Artur Bartoszewski

Zaawansowane Systemy Baz Danych

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

Przetwarzanie potokowe pipelining

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Przykładowe sprawozdanie. Jan Pustelnik

Architektura potokowa RISC

architektura komputerów w. 8 Zarządzanie pamięcią

SQL SERVER 2012 i nie tylko:

Schematy zarzadzania pamięcia

dr inż. Jarosław Forenc

AKADEMIA GÓRNICZO-HUTNICZA im. Stanisława Staszica w Krakowie. Wydział Geologii, Geofizyki i Ochrony Środowiska. Bazy danych 2

Zarządzanie pamięcią w systemie operacyjnym

Stronicowanie w systemie pamięci wirtualnej

Sortowanie zewnętrzne

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

System plików. Warstwowy model systemu plików

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Autor: Joanna Karwowska

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Procesory. Schemat budowy procesora

Indeksowanie w bazach danych

Podstawy OpenCL część 2

Zarządzanie pamięcią operacyjną

Sortowanie Shella Shell Sort

2017/2018 WGGiOS AGH. LibreOffice Base

Budowa Mikrokomputera

Normalizacja baz danych

BAZY DANYCH algebra relacyjna. Opracował: dr inż. Piotr Suchomski

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i

Zarządzanie pamięcią operacyjną

Rys. 1. Podłączenie cache do procesora.

Baza danych. Modele danych

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Podstawy Informatyki DMA - Układ bezpośredniego dostępu do pamięci

Maciej Piotr Jankowski

Organizacja typowego mikroprocesora

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Algorytm. a programowanie -

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Podstawy Informatyki. Metody dostępu do danych

Pamięć. Jan Tuziemski Źródło części materiałów: os-book.com

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Systemy OLAP II. Krzysztof Dembczyński. Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

4. Procesy pojęcia podstawowe

Systemy GIS Tworzenie zapytań w bazach danych

Polcode Code Contest PHP-10.09

dr inż. Jarosław Forenc

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

SQL (ang. Structured Query Language)

LEKCJA TEMAT: Zasada działania komputera.

Algorytmy dla maszyny PRAM

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Budowa systemów komputerowych

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Architektura Systemów Komputerowych

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

sprowadza się od razu kilka stron!

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Metoda List Łańcuchowych

Architektura komputerów

Architektura komputerów

Transkrypt:

Rozdział 22 Metody skrócenia czasu wykonywania fazy regeneracji krotek podczas realizacji złączeń w pamięci operacyjnej Streszczenie. W rozdziale opisano możliwości przyspieszenia fazy regeneracji krotek podczas realizacji algorytmów złączeń na danych znajdujących się w całości w pamięci operacyjnej. Często stosowanym wówczas podejściem jest wydzielenie z łączonych relacji podrelacji zawierających atrybuty złączenia, wykonanie złączenia na tych podrelacjach, co prowadzi do zbudowania indeksu złączeniowego a następnie na jego podstawie wygenerowanie relacji wynikowej. Faza generacji relacji wynikowej zwana także fazą regeneracji krotek stanowi w takim przetwarzaniu element najbardziej czasochłonny. W niniejszym rozdziale przeanalizowano przyczyny tego zjawiska i różne metody skrócenia czasu wykonywania fazy regeneracji. 1 Wstęp Wzrost pojemności pamięci operacyjnych wraz z jednoczesnym spadkiem ich ceny spowodował pojawienie się w ciągu kilkunastu ostatnich lat wielu systemów baz danych, w których podstawowym nośnikiem danych jest pamięć operacyjna. Systemy takie będziemy nazywać systemami baz danych w pamięci operacyjnej lub w skrócie MM DBMS (Main Memory Database Management System). Obecnie istnieje wiele takich systemów, część z nich to nawet rozwiązania komercyjne. Do tej grupy można zaliczyć przykładowo takie systemy jak: DataBlitz znany wcześniej pod nazwą Dalí [1], [11], FastDB [15], Oracle TimesTen [14], Polyhedra [13], extremedb [12]. Z rozwiązań eksperymentalnych wspomnieć należy Monet [2], [10] i Tachyon [7]. Spośród operatorów algebry relacji złączenie jest zwykle operacją najbardziej czasochłonną. Od lat poszukuje się coraz szybszych algorytmów wykonujących tę operację. W systemach typu MM DBMS czynnikiem decydującym o czasie realizacji algorytmów złączeń nie jest liczba dostępów do dysku (dane są przechowywane w pamięci operacyjnej, więc nie ma potrzeby odwoływania się do dysku) ale czas przetwarzania tych danych w pamięci. Stąd konieczne stało się takie przebudowanie klasycznych algorytmów złączeń, by dostosować je do specyfiki przetwarzania tego typu systemów. Jednym z często stosowanych rozwiązań jest wykonywanie złączeń nie na całych relacjach ale na ich kopiach zawierających wyłącznie atrybuty uczestniczące w złączeniu. Postępowanie takie prowadzi Robert Tutajewicz Politechnika Śląska, Instytut Informatyki, ul. Akademicka 16, 44-100 Gliwice, Polska email: tutajewicz@polsl.pl

R. Tutajewicz do radykalnego skrócenia czasu wykonywania złączenia, ale powoduje także konieczność wprowadzenia dodatkowej fazy, w trakcie której na podstawie uzyskanego wcześniej wyniku złączenia tworzy się pełną relację wynikową. W takim przypadku ta właśnie faza, zwana fazą regeneracji krotek, staje się najbardziej czasochłonnym elementem złączenia. Zwykle jednak łączny czas trwania obydwu faz i tak jest znacznie krótszy niż w przypadku podejścia klasycznego. W niniejszym rozdziale przedstawiono metody przyspieszenia regeneracji krotek oraz efekty zastosowania każdej z metod. W końcowej części rozdziału porównano metody między sobą wskazując stosowanie której z nich daje najlepsze rezultaty. 2 Realizacja fazy regeneracji krotek Jeżeli złączenie wykonywane jest za pomocą algorytmów z sortowaniem lub haszowaniem, czas trwania regeneracji krotek może stanowić nawet 90% łącznego czasu obliczania wyniku złączenia. Poprawienie szybkości realizacji tej fazy może zatem spowodować także wyraźną poprawę łącznego czasu wykonania algorytmów złączeń. Aby to było możliwe konieczne jest najpierw określenie źródeł opóźnień. Następnie można spróbować tak zmodyfikować stosowane algorytmy, aby wyeliminować bądź co najmniej zmniejszyć udział opóźnień w łącznym czasie realizacji. Reprezentowanie relacji w pamięci W systemach typu MM DBMS zmieniono sposób reprezentowania danych tworzących relację. Zamiast klasycznego rozmieszczenia danych zgodnie z modelem NSM, stosuje się inne rozwiązania: pionową fragmentację kolumn (model DSM), podział w poprzek atrybutów (PAX) lub podział relacji na tzw. superbloki (MBSM). W dyskowych relacyjnych systemach baz danych powszechnie stosowanym sposobem rozmieszczenia danych jest umieszczenie całych rekordów reprezentujących krotki relacji w blokach na dysku (rys. 1). Model taki nazywany jest zwykle skrótem NSM (N-ary Storage Model). Jego podstawową zaletą jest to, że cały rekord może być pobrany z dysku za pomocą jednego odczytu. Z drugiej strony, w przypadku, gdy do realizacji zapytania potrzebne są wartości tylko kilku wybranych atrybutów, konieczne jest odczytanie zawartości wszystkich bloków tworzących tabelę. W bazach danych w pamięci operacyjnej pojawia się kolejna wada tego rozwiązania: niskie wykorzystanie pamięci podręcznej. Przy przetwarzaniu danych rozmieszczonych zgodnie z tym modelem, dużą część pamięci podręcznej zajmują wartości atrybutów nie wykorzystywane w zapytaniu. Naglówek bloku Atr1 Atr2 Rekord 1 Atr1 Atr2 Atr3 Atr1 Atr2 Rekord 2 Rekord 3 Atr3 Atr3 Rys. 1. Rozmieszczenie danych w pamięci zgodnie z modelem NSM 238

Sposoby skrócenia czasu wykonywania fazy regeneracji krotek podczas realizacji złączeń w pamięci operacyjnej Alternatywą dla tego rozwiązania jest pionowa fragmentacja kolumn określana jako model DSM (Decomposition Storage Model [5]). Zgodnie z nim relację zawierającą n atrybutów należy podzielić na n podrelacji, z których każda odpowiada pojedynczemu atrybutowi. Każda podrelacja oprócz wartości odpowiadającego jej atrybutu musi przechowywać także identyfikatory rekordów (rys. 2). Model DSM został zaproponowany, by zminimalizować liczbę zbędnych dostępów do dysku w przypadku zapytań odwołujących się tylko do wybranych atrybutów. Jednakże, gdy zapytanie odwołuje się do wszystkich lub co najmniej większości atrybutów relacji, przetwarzanie takiego zapytania wiąże się ze znaczącym kosztem dodatkowym na połączenie wszystkich potrzebnych podrelacji w jedną całość. Nagłówek strony 1 Atr1 2 Atr1 3 Atr1 Podrelacja 1 Nagłówek strony 1 Atr2 2 Atr2 3 Atr2 Podrelacja 2 Nagłówek strony 1 Atr3 2 Atr3 3 Atr3 Podrelacja 3 Rys. 2. Rozmieszczenie danych w pamięci zgodnie z modelem DSM Realizacja złączeń na danych zorganizowanych zgodnie z modelem DSM składa się zwykle z 2 etapów. Pierwszym jest właściwe złączenie wykonywane na podrelacjach zawierających argumenty złączenia. W jego efekcie powstaje indeks złączeniowy, czyli dwuargumentowa relacja zawierająca identyfikatory par krotek, które powinny pojawić się w wyniku złączenia. Indeks ten staje się następnie podstawą do wygenerowania w fazie regeneracji krotek pełnej relacji wynikowej. 3 Metody skracania czasu realizacji złączeń Wszystkie eksperymenty przeprowadzono na bazie danych złożonej z 2 relacji: mniejszej R i większej S o schematach identycznych z tzw. schematem Wisconsin [6] przechowywanej zgodnie z modelem DSM. Każda z relacji liczyła 13 atrybutów będących 4-bajtowymi liczbami całkowitymi oraz 3 atrybuty napisowe o długości 52 znaków każdy. Pierwszy atrybut obydwu relacji pełnił rolę klucza i przyjmował unikalne wartości. Drugi atrybut relacji S przyjmował wartości identyczne z wartościami pierwszego atrybutu relacji R. Wartości te były rozmieszczone zgodnie z rozkładem równomiernym. Warunkiem złączenia była równość wartości pierwszego atrybutu relacji R i drugiego atrybutu relacji S. Rozmiary obydwu relacji były zawsze tak dobrane by większa z nich (S) liczyła 10-krotnie więcej rekordów niż mniejsza (R). Większość badań przeprowadzono na komputerze PC wyposażonym w procesor Intel Pentium 4 z jądrem Northwood taktowanym zegarem o częstotliwości 2,6 GHz wyposażonym w dwupoziomową pamięć podręczną o pojemności odpowiednio 8KB (pierwszy poziom) i 512 KB (drugi poziom) oraz główną pamięć operacyjną o pojemności 512 MB. 239

R. Tutajewicz 3.1 Wpływ rozmiaru relacji wynikowej Wykonanie fazy generacji relacji wynikowej polega na powtarzaniu dla każdej krotki wyniku czynności kopiowania atrybutów do tejże relacji. Dlatego też należy oczekiwać, że czas jej wykonywania będzie proporcjonalny do liczby krotek tworzących relację wynikową. Aby zweryfikować tę tezę zmierzono czasy trwania fazy regeneracji krotek dla relacji wynikowych zawierających różną liczbę krotek. Czasy te wyrażone w milionach taktów procesora zawarto w tabeli 1. Tabela 1. Czasy regeneracji krotek dla różnych rozmiarów relacji wynikowej Liczba krotek 10 20 30 40 50 60 70 80 90 100 (w tys.) Czas 20,2 48,5 71,2 99,9 132 169 208 251 293 335 regeneracji Zmierzone czasy podzielono następnie przez liczbę krotek wyniku aby wyznaczyć średni czas regeneracji pojedynczej krotki. Jak się okazuje czas przetwarzania pojedynczej krotki rośnie wraz ze wzrostem liczby regenerowanych krotek, co ilustruje rys. 4, umieszczony pod koniec rozdziału. Aby zmniejszyć czas wykonywania regeneracji krotek należy poszukać przyczyn opisanego zjawiska. 3.2 Chybienia przy dostępie do pamięci podręcznej Częstą przyczyną spowolnienia obliczeń realizowanych na danych umieszczonych w pamięci operacyjnej są opóźnienia związane z dostępem do tych danych. Z tego też powodu zmierzono liczby chybień przy odszukiwaniu danych w pamięci podręcznej podczas wykonywania regeneracji krotek dla różnych rozmiarów danych. Liczby te następnie podzielono przez liczby krotek relacji wynikowej określając tym samym średnią liczbę chybień przypadającą na generację pojedynczej krotki. Uzyskane wyniki zaprezentowano na rys. 3. Średnia liczba chybień 20 18 16 14 12 10 8 6 4 2 0 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 150 200 250 300 350 400 450 500 550 600 Rozmiar relacji wynikowej w tys. krotek Rys. 3. Średnia liczba chybień przy dostępie do pamięci podręcznej przypadająca na pojedynczą krotkę wynikową Porównanie obydwu rysunków pozwala stwierdzić, że to właśnie liczba chybień przy dostępie do pamięci powoduje opóźnienia podczas realizacji fazy regeneracji krotek. Należy 240

Sposoby skrócenia czasu wykonywania fazy regeneracji krotek podczas realizacji złączeń w pamięci operacyjnej zatem tak zmodyfikować stosowany algorytm aby zmniejszyć tę liczbę. Chybienia powstają wtedy, gdy podczas przetwarzania potrzebne dane nie znajdują się w pamięci podręcznej i muszą być sprowadzone z głównej pamięci operacyjnej. Ponieważ czas dostępu do pamięci operacyjnej jest co najmniej kilkakrotnie dłuższy od czasu dostępu do pamięci podręcznej, duża liczba chybień może znacząco wydłużyć realizację algorytmów. 3.3 Pobieranie wyprzedzające Współczesne procesory dostarczają narzędzi, w postaci mechanizmu tzw. pobierania wyprzedzającego, pozwalających zmniejszyć liczbę chybień. Pobieranie wyprzedzające można podzielić na sprzętowe i programowe. Sprzętowe pobieranie wyprzedzające polega na śledzeniu przez wydzielony moduł procesora wszystkich odwołań do pamięci, dzięki czemu możliwe jest znalezienie regularności w tych odwołaniach. Po odnalezieniu takich regularności procesor rozpoczyna pobieranie z wyprzedzeniem danych z głównej pamięci operacyjnej do pamięci podręcznej, tak że w momencie, gdy są one potrzebne w procesie obliczeniowym są już dostępne w pamięci podręcznej. Zaletą mechanizmu sprzętowego jest to, że nie wymaga on modyfikacji kodu programu. Metoda ta dobrze sprawdza się w przypadku dostępu o regularnym charakterze, nie ma natomiast zastosowania, gdy dane są pobierane losowo. Alternatywną metodą jest programowe pobieranie wyprzedzające. Mechanizm ten jest dostępny dzięki wprowadzeniu specjalnych rozkazów zlecających procesorowi pobieranie danych z pamięci w chwili gdy nie są one jeszcze potrzebne do realizacji procesu obliczeniowego. Rozwiązanie to pozwala ukryć opóźnienia związane z dostępem do danych w sytuacji nieregularnych wzorców dostępu (np. dane pobierane w sposób pseudolosowy), gdzie nie sprawdza się mechanizm sprzętowy. Podstawową wadą stosowania tej metody jest konieczność modyfikacji kodu poprzez jawne umieszczenie w nim rozkazów pobierania wyprzedzającego. Metoda ta nie sprawdza się także w przypadku programów intensywnie korzystających z pamięci (jak np. kopiowanie bloków pamięci z jednego miejsca na drugie). 3.4 Wykorzystanie pobierania wyprzedzającego Mechanizm programowego pobierania wyprzedzającego został z powodzeniem zastosowany w odniesieniu do różnych rodzajów algorytmów, w tym między innymi do algorytmów przetwarzania tablic [9], struktur opartych o wskaźniki [8], w tym do B-drzew [4] oraz do realizacji złączeń z haszowaniem [3]. W przypadku zagadnienia regeneracji relacji wynikowej mamy do czynienia z dość poważnym problemem przy implementacji pobierania wyprzedzającego, jakim jest zjawisko tzw. wyścigu wskaźników (ang. pointer-chasing). Ze względu na rozmieszczenie danych w sposób przypadkowy nie możliwe jest najprostsze podejście polegające na próbie ukrycia opóźnień związanych z dostępem do danych w ramach przetwarzania pojedynczej krotki. Nawet rozdzielenie fazy pobierania danych od fazy obliczeń na nich nie wystarcza do ukrycia opóźnień, zbyt krótki jest czas obliczeń w stosunku do czasu potrzebnego na pobranie potrzebnych danych. Stąd też nie można wprost zastosować rozwiązań wypracowanych dla algorytmów numerycznych, gdzie to najczęściej stosuje się pobieranie wyprzedzające. Można za to wykorzystać fakt braku praktycznie żadnych zależności między danymi potrzebnymi do przetwarzania sąsiednich krotek. Dzięki temu możliwe jest ukrycie opóźnień związanych z pobieraniem następnych krotek poprzez równoległe wykonywanie obliczeń 241

R. Tutajewicz na krotkach je poprzedzających. Warto przy tym zauważyć, że dystans między krotką aktualnie przetwarzaną a tą której pobieranie danych dopiero co zainicjowano, powinien być znacznie większy niż 1, gdyż czas przetwarzania pojedynczej krotki nie równoważy czasu pobierania potrzebnych do tego przetwarzania danych. Aby w pełni ukryć opóźnienia spowodowane chybieniami przy dostępie do pamięci w fazie regeneracji krotek możliwe jest wykorzystanie jednej z dwóch technik zaproponowanych dla złączenia z haszowaniem [3]. Pierwszą z tych technik jest pobieranie wyprzedzające z grupowaniem (ang. group prefetching). W tym przypadku indeks złączeniowy jest dzielony na grupy o stałej liczbie krotek. Krotki te zajmują w pamięci ciągły obszar, co przy sekwencyjnym ich przetwarzaniu pozwala wykorzystać mechanizm sprzętowego pobierania wyprzedzającego. Dla każdej krotki w grupie jej wartości są odczytywane do wewnętrznego bufora i uruchamiane są rozkazy pobierania wyprzedzającego odpowiednich krotek relacji źródłowych. Po zakończeniu tej fazy, dla każdej krotki w grupie obliczana jest krotka wynikowa. W podobny sposób przetwarzane są krotki należące do kolejnych grup. Drugą możliwą do zastosowania techniką jest potokowe pobieranie wyprzedzające (ang. software-pipelined prefetching). Także i w tym przypadku wykorzystuje się dodatkowy bufor na przechowanie fragmentu indeksu złączeniowego. Inny jest jednak schemat przetwarzania. Najpierw cały bufor ładowany jest krotkami pochodzącymi z początku indeksu złączeniowego i dla każdej takiej krotki rozpoczyna się pobieranie odpowiadających jej krotek relacji źródłowych. Po wypełnieniu bufora rozpoczyna się główna pętla przetwarzania. W pętli tej począwszy od pierwszej krotki z bufora naprzemiennie realizowane są obliczanie krotki relacji wynikowej i ładowanie w zwolnione miejsce w buforze kolejnej krotki indeksu złączeniowego oraz inicjowanie pobierania odpowiadających jej krotek relacji źródłowych. Krotki z bufora przetwarzane są cyklicznie aż do momentu pobrania ostatniej krotki z indeksu złączeniowego. W tym momencie wystarczy dla każdej krotki z bufora utworzyć odpowiadające im krotki wynikowe i na tym można zakończyć regenerację krotek. 3.5 Sortowanie indeksu złączeniowego Innym sposobem zmniejszenia liczby chybień w fazie regeneracji jest takie uporządkowanie danych, aby ich przetwarzanie odbywało się, na ile to tylko możliwe, w sposób sekwencyjny i tym samym wykorzystywało mechanizm sprzętowego pobierania wyprzedzającego. W pełni sekwencyjnego charakteru dostępu do danych nie można jednak osiągnąć, gdyż wymagałoby to posortowania całych krotek, co prowadzi do bardzo wyraźnego wzrostu czasu sortowania a co zatem idzie i wzrostu czasu realizacji całego złączenia. Można jednak dopasować kolejność przetwarzania przynajmniej do uporządkowania danych w jednej z relacji wejściowych. W tym celu należy posortować indeks złączeniowy zgodnie z kolejnością pojawiania się krotek jednej z relacji. Przyjęto, że tą relacją będzie relacja S (testy przeprowadzone dla uporządkowania indeksu złączeniowego według relacji R dawały nieco gorsze wyniki). 4 Wyniki eksperymentów W ramach badań zaimplementowano wszystkie opisane powyżej metody i porównano czasy trwania fazy regeneracji krotek przy zastosowaniu każdej z nich. Wyniki eksperymentów przestawiono w postaci wykresu (rys. 4). Podobnie jak poprzednio przedstawiono zależność średniego przetwarzania pojedynczej krotki w funkcji rozmiaru danych. 242

Sposoby skrócenia czasu wykonywania fazy regeneracji krotek podczas realizacji złączeń w pamięci operacyjnej Średni czas generacji krotki 4000 3750 3500 3250 3000 2750 2500 2250 2000 1750 1500 1250 1000 750 500 250 0 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 Liczba generowanych krotek (w tysiącach) Klasyczne Sortowanie Grupowanie Rys. 4. Zależność średniego czasu regeneracji pojedynczej krotki od liczby krotek dla rozważanych metod przyspieszenia tej fazy Na wykresie pominięto wyniki dla potokowego pobierania wyprzedzającego, gdyż w całym prezentowanym przedziale uzyskane czasy były gorsze od czasów uzyskanych dla rozwiązania klasycznego. Z wykresu widać, że najlepsze wyniki uzyskuje się dla metody wykorzystującej wstępne sortowanie indeksu złączeniowego. Metody wykorzystujące mechanizm programowego pobierania wyprzedzającego nie dały spodziewanego przyspieszenia. Fakt ten można wytłumaczyć tym, że rozważana operacja regeneracji krotek należy do grupy zadań intensywnie wykorzystujących pamięć, dla której jak już wspomniano wcześniej metody używające programowego pobierania wyprzedzającego nie sprawdzają się. Metoda sortowania indeksu złączeniowego szczególnie dobrze sprawdza się w sytuacji złączenia pary relacji, w której jedna (S) pełni rolę tablicy faktów zaś druga (R) słownika, gdy do relacji wynikowej wchodzą wszystkie krotki z tablicy faktów. W przypadku niskiej selektywności złączenia metoda ta daje słabe wyniki. Spowodowane jest to tym, że do wyniku wchodzą wtedy tylko niektóre wybrane krotki, co oznacza konieczność pomijania wielu krotek z relacji S, pobranych już do pamięci podręcznej. Wtedy jednak liczba krotek w relacji wynikowej zwykle jest niewielka i czas regeneracji nie odgrywa tak istotnej roli w łącznym czasie trwania złączenia. Literatura 1. Baulier J., Bohannon P., Gogate S., Gupta C., Haldar S., Joshi S., Khivesera A., Korth H., Mcilroy P., Miller J., Narayan P.P.S., Nemeth M., Rastogi R., Seshadri S., Silberschatz A., Sudarshan S., Wilder M., Wei C.: DataBlitz Storage Manager: Main Memory Database Performance for Critical Applications. Proc. of the ACM SIGMOD Int'l Conf. on Management of Data, Philadelphia, 1999. 2. Boncz P.A.: Monet. A next generation DBMS Kernel For Query Intensive Applications. PhD thesis, Amsterdam, 2002. 3. Chen S., Ailamaki A., Gibbons P.B., Mowry T.C.: Improving Hash Join Performance through Prefetching, Proc of the 20 th Int l Conf. On Data Engineering, Boston, 2004. 4. Chen S., Gibbons P.B., Mowry T.C.: Improving Index Performance through Prefteching, Proc. of the SIGMOD Conference, Santa Barbara, 2001. 5. Copeland A., Khoshafian S.: A Decomposition Storage Model, Proc. of the SIGMOD Conference, Austin, 1985. 243

R. Tutajewicz 6. DeWitt D.J.: The Wisconsin Benchmark: Past, Present and Future, for Database and Transaction Systems (2nd Edition). Morgan Kaufmann, 1993. 7. Kim S.W, Park S.H., Choi W.: Development of an Index Manager for a Main Memory DBMS Tachyon, 2001. 8. Luk C.K., Mowry T.C.: Compiler Based Prefetching for Recursive Data Structures, Proc. of the 7th ASPLOS Conf., Cambridge, 1996. 9. Mowry T.C., Lam M.S., Gupta A., Design and Evaluation of a Compiler Algorithm for Prefetching, Proc. of the 5th ASPLOS, Boston, 1992. 10. Żukowski M., Boncz P., Nes N., Heman S.: MonetDB/X100 A DBMS in The CPU Cache. Bulletin of the IEEE Computer Society Technical Committee on Data Engineering, 2005. 11. DataBlitz Home Page, http://www.bell-labs.com/project/dali/ 12. extremedb Home Page, www.mcobject.com 13. Polyhedra Home Page, www.polyhedra.com 14. Oracle TimesTen In-Memory Database, http://www.oracle.com/database/timesten.html 15. FastDB Home Page, http://www.garret.ru/%7eknizhnik/fastdb/fastdb.htm 244