Jarosław Gramacki - Uniwersytet Zielonogórski
Transkrypt
Jarosław Gramacki - Uniwersytet Zielonogórski
,POGFSFODKBOBVLPXB,/84 v*OGPSNBUZLBT[UVLBD[ZS[FNJPTP D[FSXDB$[PDIB KONCEPCJA ZASTOSOWANIA SZTUCZNYCH SIECI NEURONOWYCH W DIAGNOSTYCE BAZ DANYCH ORACLE Jarosław Gramacki Instytut Informatyki i Elektroniki, Uniwersytet Zielonogórski 65-246 Zielona Góra, ul. Podgórna 50 e-mail: [email protected] STRESZCZENIE W artykule przedstawiono koncepcjĊ zastosowania sztucznych sieci neuronowych w diagnostyce kluczowych parametrów wydajnoĞciowych bazy danych ORACLE. Pokazano, Īe jest uzasadnione i moĪliwe zbudowanie układu neuronowego przewidującego ewentualne pogorszenie siĊ wybranych parametrów bazy. 1. WPROWADZENIE Wymieniü moĪna co najmniej parĊ czynników i związanych z nimi zadaĔ wpływających na wydajnoĞü bazy danych w obszarze związanym z zarządzaniem pamiĊcią [2]. Wymienione poniĪej oraz zilustrowane na rysunku 1 elementy tworzą tzw. globalny obszar systemowy SGA (ang. System Global Area), który jest niczym innym jak odpowiednio zarządzanym na potrzeby bazy danych Oracle obszarem pamiĊci operacyjnej komputera. PamiĊü ta jest zawsze alokowana w momencie uruchamiania instancji bazy poleceniem startup (wydanym z poziomu programu Server Manager – do wersji 8i, lub SQL*Plus – w wersjach 9i oraz 10g). Jest ona jednoczeĞnie współdzielona przez wszystkich uĪytkowników podłączonych w danym momencie do bazy. Do głównych zadaĔ administratora bazy naleĪy [3, 4, 6]: strojenie obszaru współdzielonego (ang. Shared Pool), strojenie dziennika powtórzeĔ (ang. Redo Log Buffer), strojenie bufora danych (ang. Buffer Cache). W pracy skupiono siĊ nad zagadnieniem obsługi bufora danych. Zaproponowana metodologia nie bĊdzie merytorycznie róĪniü siĊ w pozostałych przypadkach a róĪnice bĊdą jedynie iloĞciowe. 105 Globalny Obszar Systemowy SGA (ang. System Global Area) bufor danych (DB_Block_Size, DB_Block_Buffers) obszar współdzielony (Shared_Pool_Size) współdzielony obszar poleceĔ SQL bufora dziennika powtórzeĔ (Log_Buffer) bufor słownika danych Rys. 1. Globalny obszar systemowy SGA. Czcionką nieproporcjonalną podano odpowiednie parametry pliku konfiguracyjnego instancji init<SID>.ora WielkoĞü obszaru SGA okreĞliü moĪna wydają na przykład poniĪsze polecenie -- Parametry instancji SELECT * FROM v$sga; -- przykładowy wynik NAME VALUE ---------------- --------Fixed Size 75804 Variable Size 106840064 Database Buffers 49594368 Redo Buffers = 8192 * 6054 DB_Block_Size * DB_Block_Buffers 77824 WielkoĞü bufora danych oblicza siĊ jako iloczyn dwóch parametrów konfiguracyjnych instancji Oracle: DB_Block_Size oraz DB_Block_Buffers. Pierwszego z nich nie moĪna zmieniaü bez przebudowania bazy danych, gdyĪ jego wielkoĞü ustawiana jest w momencie tworzenia nowej bazy danych. Podaje on w bajtach rozmiar najmniejszego elementu obszaru bufora danych – jednego bloku danych. Doborowi podlega parametr DB_Block_Buffers, który okreĞla liczbĊ bloków, które tworzą cały bufor danych. W obszarze pamiĊci jakim jest bufor danych przechowuje siĊ dane uĪytkowe (tabele, indeksy), do których dostĊp mają wszyscy uĪytkownicy systemu (oczywiĞcie w zakresie posiadanych do nich uprawnieĔ). Po wystartowaniu bazy danych bufor danych jest pusty i zapełnia siĊ stopniowo wraz z pobieraniem przez uĪytkowników kolejnych danych z plików dyskowych. Gdy w jakimkolwiek momencie pracy któryĞ z uĪytkowników zaĪąda 106 jakichkolwiek danych, system w pierwszej kolejnoĞci stara siĊ odnaleĨü je w pamiĊci operacyjnej czyli w buforze danych. PoniewaĪ czas dostĊpu do pamiĊci jest nieporównywalnie krótszy niĪ czas dostĊpu do pliku (plików) dyskowego, wiĊc optymalny dobór parametrów bufora danych ma bezpoĞredni wpływ na Ğredni czas dostĊpu do danych. W pracy pominiĊto oczywisty, choü nie zawsze uĞwiadamiany sobie przez administratorów, aspekt pierwszeĔstwa strojenia modelu danych, na których działa aplikacja, strojenia (optymalizacji) samej aplikacji oraz ĞciĞle związane z tym ostatnim strojenie zapytaĔ SQL. Wydaje siĊ, Īe w wielu przypadkach problem (pozornie słabej) wydajnoĞci systemu leĪy nie w niewłaĞciwych parametrach instancji bazy, ale w aplikacjach, które w niej działają. Innym problemem jest czĊsto duĪe przeszacowanie zaalokowanych zasobów systemowych (głównie pamiĊci) na potrzeby instancji. Pomijając oczywiste w takim przypadku marnotrawienie zasobów sprzĊtowych komputera, problemem w takim przypadku moĪe byü duĪy narzut obliczeniowy związany z koniecznoĞcią obsługi np. nieracjonalnie duĪego bufora danych. NaleĪy równieĪ wspomnieü, Īe w buforze danych mogą równieĪ znajdowaü siĊ kopie tych samych danych, jeĞli na przykład wiĊcej niĪ jedna transakcja operuje na tych samych danych i zmiany nie zostały jeszcze zatwierdzone (ang. committed). Fakt ten nie zmienia jednak istoty buforowania w pamiĊci zawartoĞci bazy danych. Parametrem charakteryzującym "jakoĞü" bufora danych jest tzw. współczynnik trafieĔ w bufor (ang. Cache Hit Ratio). Wyliczany on jest na podstawie analizy całkowitej liczby fizycznych operacji odczytu z dysku (ang. physial reads) oraz całkowitej liczby operacji odczytu danych, które odnaleziono w buforze. Dane do jego wyliczenia (tzw. statystyki) znajdują siĊ odpowiednich tzw. tabelach (widokach) słownikowych systemu Oracle i uaktualniane są na bieĪąco w trakcie pracy systemu. Zwykle uĪyteczną ich wartoĞü moĪna obliczyü dopiero po kilku / kilkunastu godzinach pracy systemu, licząc od momentu uruchomienia instancji. -- Wyliczenie współczynnika trafieĔ w bufor SELECT (1 FROM v$sysstat WHERE PR.name DBG.name CG.name (PR.value / (DBG.value + CG.value)))*100 "Cache Hit Ratio" PR, v$sysstat DBG, v$sysstat CG = 'physical reads' AND = 'db block gets' AND = 'consistent gets'; -- przykładowy wynik Cache Hit Ratio --------------95,5167612 107 ZaleĪnoĞü miĊdzy wielkoĞcią bufora a współczynnikiem trafieĔ nie jest liniowa. Oznacza to, Īe po osiągniĊciu pewnej granicznej wielkoĞci bufora danych, dalsze zwiĊkszanie jego rozmiaru daje znikome efekty, a dodatkowy narzut obliczeniowy związany z zarządzaniem wiĊkszą iloĞcią pamiĊci moĪe skutkowaü nawet spowolnieniem pracy całego systemu. Wspomnianą nieliniowoĞü łatwo pokazaü eksperymentalnie, wykonując wykres zaleĪnoĞci współczynnika trafieĔ od wielkoĞci bufora danych dla zadanego scenariusza dostĊpu do miara fizycznych dostĊpów do dysku danych. NieliniowoĞü ta szczególnie uzasadnia zastosowanie sieci neuronowych do analizy (aproksymacji) tej zaleĪnoĞci [7, 8]. Na rysunku 2 pokazano hipotetyczną zaleĪnoĞü pomiĊdzy wielkoĞcią fizycznych dostĊpów do danych dyskowych a wielkoĞcią bufora. W rzeczywistoĞci liczba analizowanych parametrów bĊdzie duĪo wiĊksza. kształt intuicyjny kształt rzeczywisty ~0.5 ~0.1 wielkoĞü bufora danych Rys. 2. Ilustracja rzeczywistego i intuicyjnego przebiegu zaleĪnoĞci iloĞci dostĊpów do fizycznych plików z danymi od wielkoĞci bufora danych Uwaga. Przy analizie współczynnika trafieĔ pamiĊtaü naleĪy, Īe wyniki tzw. pełnego odczytu tabeli (ang. full table scan) nie są domyĞlnie kierowane w "normalny" sposób do bufora, ale w sposób zapewniający moĪliwie szybkie "pozbycie" siĊ wyników takich odczytów z bufora. W czasie testów wygodnie jest jednak zapełniaü bufor takimi właĞnie odczytami (wtedy łatwo o duĪe porcje danych). DomyĞlne działanie procesu obsługującego bufor łatwo jednak zmieniü poprzez uĪywanie w zapytaniach SQL wskazówki CACHE (ang. hint). Opcja ta jest równieĪ czĊsto wykorzystywana do zapewnienia sobie szybkiego dostĊpu do tzw. małych słowników (ang. small lookup tables), które w normalnym trybie (NOCHACHE) byłyby szybko usuniĊte z bufora danych. WielkoĞü parametru DB_Block_Buffers dobiera siĊ eksperymentalnie, korzystając z wiedzy i doĞwiadczenia administratora systemu. Jest to jednak zawsze proces długotrwały a czĊsto i uciąĪliwy, gdyĪ wymaga restartu instancji i nastĊpnie odpowiednio długiej pracy w normalnych warunkach w celu wypełnienia siĊ bufora danych i zaistnienia odpowiednio duĪej iloĞci dostĊpów do zgromadzonych w nim danych. 108 Odpowiednie procedury, opisane w [4, 6], pozwalają na symulacjĊ wpływu zwiĊkszenia i / lub zmniejszenia bufora danych na wynikowy współczynnik trafieĔ. Stosowane tam podejĞcie jest jednak uciąĪliwe – podobnie jak dla przypadku opisanego wyĪej. 2. SIECI NEURONOWE Najogólniej stwierdziü moĪna [7, 8], Īe dobrze skonstruowana sieü neuronowa (SN) jest w stanie "nauczyü siĊ" aproksymowaü dowolną funkcjĊ wielu zmiennych f(x1, x2,. x3,...,xN). Zmiennymi mogą byü dowolne wartoĞci reprezentujące wybrany obiekt sterowania (w naszym przypadku: bazy danych). Cechą podstawową SN jest wiĊc moĪliwoĞü uczenia siĊ odwzorowywania dowolnej funkcji, najczĊĞciej zaleĪnej od wielu zmiennych i silnie nieliniowej. PoniewaĪ jest to aproksymacja, a nie interpolacja, to sieü jest w stanie uogólniaü wiedzĊ, wykrywaü istniejące pomiĊdzy zmiennymi zaleĪnoĞci. W procesie uczenia sieü tworzy wiĊc rodzaj statystycznego modelu uczonej zaleĪnoĞci (funkcji). SN jest zbudowana z tzw. neuronów, ułoĪonych warstwami. Szczegóły budowy pojedynczego neuronu [7, 8] nie są w tych dosyü ogólnych rozwaĪaniach istotne. Neurony tej samej warstwy nie są połączone miĊdzy sobą, ale neurony dwóch sąsiednich warstw są połączone "kaĪdy z kaĪdym". WyróĪnia siĊ warstwĊ wejĞciową (We), warstwy ukryte (U) (zazwyczaj 1 lub 2) i warstwĊ wyjĞciową (Wy). Sygnał przechodzi od warstwy We poprzez U aĪ do Wy, skąd jest odbierany i interpretowany. Sygnał przechodząc przez dane połączenie wewnątrz SN zostaje pomnoĪony przez liczbĊ przypisaną temu połączeniu, zwaną wagą połączenia. Wagi mogą mieü dowolne wartoĞci rzeczywiste. Siec taka zwana jest równieĪ perceptronem wielowarstwowym. We U wagi połączeĔ x1 wagi połączeĔ Wy ••• x2 • ••• x3 • • • • • • • y1 yM ••• • xN Rys. 3. Sieü jednokierunkowa jako perceptron wielowarstwowy. Tworzą go neurony ułoĪone w warstwach o jednym kierunku przepływy sygnałów, o połączeniach miĊdzywarstwowych jedynie pomiĊdzy sąsiednimi warstwami 109 W pierwszej kolejnoĞci naleĪy ustaliü, jak sieü bĊdzie zbudowana. IloĞü neuronów wejĞciowych i wyjĞciowych jest okreĞlona z góry dla danego problemu, natomiast iloĞü neuronów w warstwach ukrytych (oraz iloĞü samych warstw, choü zazwyczaj stosuje siĊ jedną, góra dwie) moĪna regulowaü. Po wyborze struktury sieci (wstĊpnej, gdyĪ w kolejnych krokach moĪe zajĞü potrzeba jej modyfikacji) przechodzi siĊ do zasadniczej czynnoĞci – tzn. di jej uczenia. Uczenie to po prostu dobieranie wag połączeĔ miĊdzy neuronami w taki sposób, aby po podaniu na wejĞcie sieci jakichĞ wartoĞci, na jej wyjĞciu uzyskaü odpowiedni wynik. Uczenie odbywa siĊ w nastĊpujący sposób: Przygotowuje siĊ zestaw danych wejĞciowych wraz z odpowiadającymi im wynikami, jakie powinna uzyskaü sieü. Wagi sieci inicjalizuje siĊ w sposób przypadkowy. NastĊpnie podaje siĊ kolejno, wiele razy, wszystkie zestawy danych wejĞciowych i patrzy, na ile odpowiedĨ sieci róĪni siĊ od poprawnego wyniku. Oblicza siĊ róĪnicĊ i nastĊpnie w odpowiedni sposób koryguje siĊ wagi połączeĔ wewnątrz sieci (poczynając od ostatniej warstwy, aĪ do warstwy wejĞciowej). W wyniku otrzymujemy sieü nauczoną, tj. mającą odpowiednie wartoĞci wag, aby efektywnie rozwiązaü postawione jej zadanie. Po nauczeniu sieci trzeba ją nastĊpnie przetestowaü – do tego wykorzystuje siĊ kolejny zestaw danych wejĞciowych i wyjĞciowych, ale takich, które nie były wykorzystane podczas uczenia. JeĞli na tym zestawie odpowiedzi sieci na zadane wymuszenia bĊdą poprawne, to moĪna siĊ spodziewaü, Īe w sytuacjach przyszłych (dla jakichĞ nieznanych danych) teĪ tak bĊdzie. JeĞli nie – trzeba powtórzyü uczenie, ewentualnie zmieniając budowĊ sieci albo zestaw danych uczących. Generalnie rzecz biorąc, tylko jeden układ przestrzenny sieci jest optymalny. JeĞli warstwy ukryte mają zbyt wiele neuronów, sieü nadmiernie dopasowuje siĊ do nauczanych danych (jej wynik staje siĊ bliĪszy interpolacji) i przez to traci zdolnoĞü uogólniania. O takiej sieci mówi siĊ, Īe jest "przeuczona". JeĞli natomiast neuronów w warstwach ukrytych jest za mało, sieü nie jest w stanie poprawnie odtworzyü uczonej funkcji, jest "niedouczona". 3. PRZEWIDYWANIE PARAMETRÓW BUFORA DANYCH W naszym przypadku aproksymowaü bĊdziemy opisany w rozdziale 1 współczynnik trafieĔ (wyjĞcie SN) w funkcji takich zmiennych jak: wielkoĞü bufora danych, wielkoĞü obiektów (tabel) w bazie danych, sposób i czĊstotliwoĞü dostĊpu do danych, wykorzystanie indeksów, itp. (wejĞcia SN) [1]. W rzeczywistoĞci analiza tych parametrów (zmiennych) w kontekĞcie strojenia wydajnoĞci bufora danych jest klasycznym zagadnieniem diagnostycznym, w którym wykorzystywana jest wiedza eksperta (tu: administratora systemu Oracle). OczywiĞcie model matematyczny (funkcja wielu zmiennych) nie jest znana. W rzeczywistoĞci nawet trudno wyobraziü sobie zbudowanie takiego, nawet przybliĪonego, modelu. W 110 praktyce funkcja ta podana bĊdzie w postaci tabelarycznych danych bĊdących wynikiem np. wielu przeprowadzonych eksperymentów na bazie. Zebrane dane zostaną zinterpretowane przez sieü neuronową, a zbudowany w ten sposób neuronowy model wybranego aspektu działania bazy danych zostanie uĪyty do predykcji wartoĞci współczynnika trafieĔ dla innych wartoĞci zmiennych wejĞciowych. 4. ZADANIE TESTOWE Korzystano z klasycznego w systemie Oracle schematu SUMMIT2, (skrypt o nazwie summit2.sql instaluje siĊ automatycznie w systemie) do którego wprowadzono bardzo duĪą iloĞü danych do tabel biorących udział w złączeniach N:N. Przykładowo zarejestrowano ok. 200 tysiĊcy faktur sprzedaĪy, ok. 100 tysiĊcy zamówieĔ, podobną liczbĊ stanów magazynowych produktów oraz kilkanaĞcie tysiĊcy danych o klientach firmy. Dane udostĊpniono trzem uĪytkownikom. W losowy sposób, losowy uĪytkownik wybiera po kilkanaĞcie tysiĊcy wierszy z losowo wybranego układu odpowiednich (moĪliwych do sensownego złączenia) tabel. Wymuszono przy tym, aby wszystkie dane zostały normalnie przesłane do bufora (hint CACHE). IloĞü i czĊstotliwoĞü pobrania okreĞlonego zbioru danych tworzą tzw. miarĊ charakteru wykorzystania zgromadzonych danych [1]. WielkoĞci te (odpowiednio przeskalowane) podawane są na wejĞcia sieci neuronowej. Kolejną daną wejĞciową jest wielkoĞü bufora danych. WyjĞciem jest wyliczony dla takiego układu danych współczynnik trafieĔ w bufor. Dla powyĪszych danych przeprowadzono proces uczenia wielowarstwowej sieci neuronowej z jedną i dwoma warstwami ukrytymi metodą wstecznej propagacji błĊdów. Praktyczne wykorzystanie nauczonej sieci bĊdzie polegało np. na otrzymaniu informacji o charakterze wykorzystania zgromadzonych danych na podstawie aktualnej wielkoĞci bufora czy teĪ o (przewidywanej) wielkoĞci współczynnika trafieĔ w bufor na podstawie zmiany charakteru wykorzystania danych przez uĪytkowników bazy. Podobnie dla oczekiwanego współczynnika trafieĔ moĪna by okreĞlaü konieczne zmiany w wielkoĞci bufora danych. 5. PODSUMOWANIE W pracy zaprezentowano koncepcjĊ zastosowania sieci neuronowych w analizie danych istotnych dla optymalnego zarządzania pamiĊcią w systemie Oracle. Uzasadniono powód ich zastosowania oraz przedstawiono szkic rzeczywistych testów w Ğrodowisku Oracle dostarczających bazĊ wiedzy wykorzystywaną w uczeniu wybranej struktury sieci neuronowej. Aby przekonaü siĊ o praktycznej celowoĞci zaprezentowanego w pracy podejĞcia naleĪałoby wykonaü wiĊkszą liczbĊ testów na rzeczywistej bazie, zawierającej duĪą liczbĊ danych i 111 dodatkowo bardzo intensywnie eksploatowanej. Autor pracy prowadzi obecnie takie eksperymenty, wyniki tych prac bĊdą sukcesywnie publikowane. LITERATURA [1] U. Harder, T. MacLeod: Predicting buffer hit ratios with neural networks, UK Performance Engineering Workshop 1999, Bristol University (ISBN 0952402785) [2] Oracle Concepts: Dokumentacja systemu Oracle [3] Oracle Administrator's Guide: Dokumentacja systemu Oracle [4] Oracle Designing and Tuning for Performance: Dokumentacja systemu Oracle [5] Schemat SUMMIT2 (skrypt summit2.sql): dostĊpny na kaĪdej płycie instalacyjnej systemu Oracle [6] J. Wrembel, M. Jezierski, M. Zakrzewicz: System zarządzania bazą danych Oracle 7 i Oracle 8, Wydawnictwo Nakom, PoznaĔ, 2000, ISBN 83-86969-34-2 [7] J. Korbicz, A. Obuchowicz, D. UciĔski: Sztuczne sieci neuronowe, Podstawy i zastosowania, Akademicka Oficyna Wydawnicza PLJ, Warszawa 1994 [8] R. Tadeusiewicz: Sieci neuronowe, Warszawska Akademicka Oficyna Wydawnicza RM, Warszawa 1993 112