Bazy danych Optymalizacja bazy danych 265 266 Bazy danych Przegląd zagadnień Monitoring bazy Tuning automatyczny Podsumowanie Laboratorium NajwaŜniejszym kryterium, według którego uŜytkownicy oceniają pracę administratora baz danych, jest wydajność bazy danych. Przez wydajność bazy danych rozumieć naleŜy czas odpowiedzi serwera na zapytania wykonywane przez uŜytkowników. Optymalnie działająca baza danych odpowiada na zapytania w ułamkach sekund (maksymalnie w ciągu kilku sekund przy duŜej ilości danych i złoŜonej strukturze bazy). Rozumienie zagadnień dotyczących optymalizacji (tuningu) baz danych jest zatem kluczowe dla administratorów. Bazy danych 267 Monitoring bazy Co warto monitorowac Tworzenie planu monitoringu Narzedzia monitoringu NiezaleŜnie od tego, jakiego oprogramowania uŜywamy jako SZBD i jak dobrze skonfigurowaliśmy serwer i bazy danych, dobry administrator monitoruje na bieŜąco działanie serwera. Dobry administrator jest takŜe świadomy istnienia potencjalnych "wąskich gardeł" systemu i zapobiega sytuacjom, w których serwer nie spełnia załoŜonych wymagań wydajnościowych. 268 Bazy danych Co warto monitorować Wskaźniki monitorowania moŜna podzielić na dwie kategorie: wskaźniki sprzętowe oraz wskaźniki monitorujące SZBD. Wskaźniki sprzętowe dotyczą monitorowania: • • • • • procesorów serwera (procentowe uŜycie procesora), pamięci RAM (ilość wolnej pamięci, poziom stronicowania pamięci na dyskach twardych), interfejsów sieciowych (zuŜycie przepustowości, ilość danych transferowanych), zapisu / odczytu z dysków twardych, ilości wolnego miejsca na dyskach twardych. Wskaźniki monitorujące SZBD dotyczą monitorowania: • • • • • • rozmiaru plików baz danych, eskalacji blokad i zakleszczeń, ilości aktywnych transakcji, ilości aktywnych połączeń z bazami danych, czasu wykonania zapytań do baz danych, udanych / nieudanych prób logowania do serwera. Tworzenie planu monitoringu Przed przystąpieniem do monitorowania serwera musisz zaplanować, co chcesz monitorować, jakim narzędziem i jakie są akceptowalne wartości monitorowanych wskaźników. Musisz stworzyć podstawę pod monitoring (ang. baseline). Podstawa ta to określenie normalnych poziomów monitorowanych wskaźników i załoŜenie, przy jakich poziomach niezbędna jest reakcja administratora. Dla przykładu, jeśli zamierzasz monitorować procesor, to naleŜy załoŜyć, Ŝe wskaźnik procentowego zuŜycia procesora nie będzie stale utrzymywał się na poziomie powyŜej 85%. Informacje o prawidłowych poziomach wskaźników monitorowania moŜna znaleźć w dokumentacji SZBD. Narzędzia monitoringu Systemy operacyjne oraz SZBD oferują szeroką gamę narzędzi do monitorowania. Narzędzia te bardzo często uzupełniają się wzajemnie funkcjonalnością. Przykładem narzędzia do monitorowania serwera jest Performance Monitor w systemie Microsoft Windows. Narzędzie to umoŜliwia monitorowanie głównie aspektów sprzętowych funkcjonowania serwera. Microsoft SQL Server podczas instalacji dodaje wiele nowych wskaźników do tego narzędzia, co sprawia, Ŝe moŜna monitorować bardzo dokładnie działanie nie tylko maszyny, ale takŜe SZBD. Bazy danych 269 Rys. 14.1 Performance Monitor w systemie Microsoft Windows Server 2003 Microsoft SQL Server udostępnia narzędzie monitorowania - Profiler. Narzędzie to umoŜliwia m.in. monitorowanie wykonywanych w bazach danych zapytań, nagranie pliku ze zmonitorowanymi zdarzeniami, interakcję z danymi zapisanymi przy pomocy Performance Minitora. Rys.14.2 SQL Server Profiler w działaniu 270 Bazy danych Oprócz narzędzi graficznych SZBD oferują takŜe programowe narzędzia monitorowania operacji wykonywanych na serwerze. Przykładem takiego mechanizmu są triggery DDL (DDL - Data Definition Language, część języka SQL odpowiedzialna za tworzenie i modyfikowanie struktury baz danych), dzięki którym administrator ma kontrolę nad wykonywanymi w bazach danych operacajami zmieniającymi struktury obiektów. Monitorowanie musi być stale prowadzone. Nigdy nie zakładaj, Ŝe nie ma potrzeby przeglądania dziennika błędów systemu, czy uruchamiania monitorowania sprzętu. Dobrym nawykiem jest uruchamianie narzędzi graficznych, które mogą niepotrzebnie obciąŜać serwer, na innym komputerze. Bazy danych 271 Tuning automatyczny Obiektami bazy danych, które mają bodaj największy wpływ na optymalizację czasu wykonywania zapytań do baz danych są indeksy. Większość indeksów tworzy sam administrator. Czasem jednak struktura bazy jest bardzo złoŜona. Często zbyt małe doświadczenie nie pozwala administratorowi na utworzenie funkcjonalnych indeksów. W takich momentach warto zapoznać się z narzędziami, które oferują producenci SZBD. Te narzędzia to automaty, które po otrzymaniu od uŜytkownika pewnej ilości danych na temat zapytań do optymalizacji, dokonują obliczeń i proponują nowe struktury danych, jak indeksy czy widoki. Jak wykonać automatyczny tuning? Aby wykonać automatyczny tuning musisz wykonać kilka kroków: 1. Przygotuj tak zwany workload, czyli zapisz najczęściej wykonywane polecenia lub przygotuj zapis operacji wykonywanych na serwerze przez jakiś czas (powiedzmy cały dzień zwykłego uŜywania baz danych), 2. Uruchom narzędzie do automatycznego tuningu. 3. WskaŜ przygotowany w kroku 1 workload. 4. Ustaw opcje optymalizatora, takie jak: czas działania, stopień optymalizacji, obiekty optymalizujące zapytania. 5. Uruchom proces optymalizacji. 6. Dokładnie prześledź propozycje narzędzia. Odrzuć propozycje, które nie pasują do Twojej koncepcji bazy danych. 7. Zapisz skrypt z propozycjami narzędzia lub od razu przystąp do implementacji zaproponowanych obiektów. Pamiętaj, by kontrolować propozycje narzędzi do automatycznego tuningu. Nic nie zastąpi wiedzy i umiejętności logicznego myślenia człowieka. Czasem z róŜnych przyczyn (brak dostatecznie wielu informacji, błędy programistów) propozycje mogą okazać się wręcz absurdalne. Autorzy w czasie wielu lat pracy z róŜnymi systemami zetknęli się juŜ z sytuacjami, gdy narzędzie proponowało utworzenie indeksu na wszystkich kolumnach tabeli jednocześnie... Bardziej szczegółowe informację na temat narzędzi do tuningu automatycznego znajdziesz w laboratorium. 272 Bazy danych Podsumowanie Przechowywanie danych w XML Wybieranie danych z XML Optymalizacja wydajności baz danych to duŜe wyzwanie dla administratorów. Zaplanowanie struktury indeksów bardzo często jest trudnym zadaniem. Jednak podjęcie próby stworzenia indeksów w przypadku duŜych baz danych jest inwestycją, która potrafi się zwrócić poprzez znaczny wzrost wydajności. W ekstremalnych przypadkach czas wykonywania zapytań skraca się z kilkudziesięciu sekund nawet do ułamków sekund. Bazy danych Laboratorium 273 274 Bazy danych Monitoring W tym ćwiczeniu przeprowadzisz monitorowanie aktywności na serwerze baz danych przy uŜyciu dwóch narzędzi: monitora systemowego i programu SQL Server Profiler. Krok 1 - Uruchomienie monitora systemowego ► ► ► Zaloguj się do maszyny wirtualnej ZBD jako uŜytkownik Administrator z hasłem P@ssw0rd. Kliknij Start i Uruchom.... W oknie Uruchamianie wpisz perfmon i wciśnij ENTER, aby uruchomić monitor wydajności systemu Windows. Rys. 14.3 Monitor systemowy ► ► ► ► ► ► ► Po lewej stronie rozwiń opcję Dzienniki wydajności i alerty. Po lewej stronie kliknij prawym przyciskiem myszy na opcji Dzienniki liczników i wybierz z menu kontesktowego opcję Ustawienia nowego dziennika.... W oknie Ustawienia nowego licznika wpisz SQL i kliknij OK. Kliknij na przycisku Dodaj liczniki.... Kliknij Dodaj, aby dodać licznik Czas procesora (%). Kliknij Zamknij. Zmień wartość w polu tekstowym Interwał na 5 (aby próbkowanie wartości liczników odbywało się co 5 sekund) i kliknij OK. Bazy danych 275 Rys. 14.4 Dziennik liczników w monitorze systemowym ► Na pytanie o utworzenie katalogu odpowiedz Tak. Nie zamykaj monitora systemowego. Monitor systemowy słuŜy na ogół do monitorowania sprzętu procesora, pamięci RAM, dysków twardych, interfejsów sieciowych. Microsoft SQL Server dodaje do monitora systemowego swoje własne liczniki, m.in. do monitorowania konkurencji transakcji, ilości aktywnych połączeń, eskalacji blokad w bazach danych. Krok 2 - Uruchomienie programu Profiler ► ► ► ► Kliknij Start. Z grupy programów Microsoft SQL Server 2005 z folderu Performance Tools uruchom SQL Server Profiler. W menu narzędzia Profiler (w górnej części ekranu) kliknij File - New Trace.... Kliknij Connect. W oknie Trace Properties w polu tekstowym Trace name wpisz SQL, zaznacz pole wyboru Save to file, w oknie zapisywania kliknij Zapisz i kliknij Run. 276 Bazy danych Rys. 14.5 SQL Server Profiler w działaniu Krok 3 - Generowanie aktywności na serwerze ► ► ► ► ► ► Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab03\Activity.sql i kliknij Open. Wciśnij F5, aby uruchomić kod. Krok 4 - Analiza aktywności ► ► ► ► ► ► ► ► W programie SQL Server Profiler zatrzymaj uruchomione śledzenie (klikając w górnej części ekranu przycisk STOP - czerwony kwadrat), a następnie zamknij okno śledzenia (ale nie okno programu Profiler). W oknie monitora systemowego klikni prawym przyciskiem myszy na aktywnym dzienniku liczników SQL i w menu kontekstowym wybierz Zatrzymaj. Zamknij okno monitora systemowego. W oknie narzędzia SQL Server Profiler kliknij w menu głównym File Open - Trace File.... WskaŜ plik SQL.trc i kliknij Otwórz. W menu głównym kliknij File - Import Performance Data.... WskaŜ plik SQL_000001.blg w katalogu C:\perflogs i kliknij Otwórz. W oknie Performance Counters Limit Dialog zaznacz opcję Procesor i kliknij OK. Na wykresie, który ilustruje zuŜycie procesora zmierzone przez monitor systemowy, wybierz maksymalny punkt. Sprawdź w odczytach Profilera, które polecenie SQL spowodowało najwyŜsze zuŜycie procesora. Bazy danych 277 Automatyczny tuning W tym ćwiczeniu przeprowadzisz próbę automatycznej optymalizacji zapytania z ćwiczenia poprzedniego. Do przeprowadzenia ćwiczenia niezbędna jest tabela Sales.SalesOrderDetailCopy, którą moŜesz stworzyć wykonując skrypt z ćwiczenia do modułu 6. Krok 1 - Otwarcie zapytania do optymalizacji ► ► ► ► ► ► Zaloguj się do maszyny wirtualnej ZBD jako uŜytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab13\Automate.sql i kliknij Open. Krok 2 - UŜycie narzędzia Database Engine Tuning Advisor ► Z menu głównego (górna część ekranu) wybierz Query - Analyze Query in Database Engine Query Advisor. Rys. 14.6 Database Engine Tuning Advisor 278 Bazy danych ► W górnej części ekranu kliknij Start Analysis, by rozpocząć pracę narzędzia. Rys. 14.7 Wynik analizy i propozycje utworzenia nowych obiektów ► ► ► Po zakończeniu procesu analizy z menu głównego wybierz Action Apply Recomendations.... W oknie Apply Recomendations upewnij się, Ŝe zaznaczona jest opcja Apply now i kliknij Close. Kliknij Close. Okazuje się, Ŝe Database Engine Tuning Advisor zaproponował identyczny indeks jak ten, który stworzyłeś w poprzednim ćwiczeniu. Dodatkowo zaproponował stworzenie dodatkowych statystyk, które według jego wyliczeń równieŜ zoptymalizują zapytanie. W ramach praktyki włącz opcję statystyk wejścia / wyjścia (patrz poprzednie ćwiczenie) i uruchom optymalizowane zapytanie. W zakładce Messages sprawdź, ile stron skanował serwer przy wykonywaniu zapytania po stworzeniu obiektów zaproponowanych przez narzędzie automatycznego tuningu. Jakieś wnioski? Ilość odczytów powinna drastycznie zmaleć. A zatem narzędzie zadziałało poprawnie. Narzędzia automatycznego tuningu wymagają podania odpowiedniej ilości danych (czytaj - duŜej ilości zapytań). Wtedy jest szansa, Ŝe kombinacja indeksów, statystyk i widoków zaproponowana przez narzędzie, będzie optymalna dla duŜej ilości najczęściej zadawanych zapytań.