Narzędzia używane podczas laboratorium Tworzenie bazy danych
Transkrypt
Narzędzia używane podczas laboratorium Tworzenie bazy danych
Laboratorium IBM DB2 – Wydajność 1 Narzędzia używane podczas laboratorium DB2 Shell Narzędzie do uruchamiania poleceń db2. Można uruchamiać wsadowo skrypty: db2 –tvf skrypt.sql DB2 Workload Performance Advisor Narzędzie do analizy działania sposobu bazy danych dla podanych zapytań SQL. Jako parametr można podać „workload” – zestaw danych do analizy lub po prostu zapytanie SQL. db2advis –d baza –i skrypt.sql DB2 Benchmark Narzędzie mierzące rzeczywisty czas wykonania skryptu podanego jako parametr. Sposób użycia: db2batch –d baza –f skrypt.sql Event Monitor Obiekt tworzony w bazie danych, który automatycznie rejestruje aktywność bazy danych. Na podstawie tych danych można tworzyć „workloady” z analizą nadłużej wykonywanych zapytań. Uwaga! wszystkie skrypty używane podczas laboratorium znajdują się w katalogu c:/labdb2 Tworzenie bazy danych Stworzyć nową bazę test (create database test) Podłączyć się do niej (connect to test) Wykonać skrypt explain.ddl (db2 –tvf explain.ddl) Stworzyć tabelę casdat (db2 –tvf crsacdat.sql) Załadować dane do tabeli casdat (db2 –tvf casdat_dump.sql) Jeśłi operacja trwa dłużej niż 5 minut – przerwać ją, sprawdzić ile rekordów zostało załadowanych i usunąć wszystkie załadowane rekordy. Załadować dane do tabeli z pliku casdat_load.txt polecenem LOAD (db2 load from 'casdat_load.txt' of del insert into casdat) Część 1: Analiza zapytań (query rewriting) Zadanie 1: Podaj numery CAS odczynników, które mają więcej właściwości typu SENT niż typu RENT Rozwiązanie 1 – jak na laboratorium z Baz Danych (q1a): select c1.cas,count(distinct c1.data) from casdat c1 where c1.type='sent' group by c1.cas having count(distinct c1.data)> (select count(distinct c2.data) from casdat c2 where c2.type='rent' and c2.cas=c1.cas); Uruchom zapytanie – sprawdź liczbę wierszy i czas wykonania. Sprawdź czas wykonania tego zapytania za pomocą db2batch Sprawdź przewidywany czas wykonania za pomocą db2advis Rozwiązanie 2 (q1b): select c1.cas from casdat c1 join casdat c2 on c1.cas=c2.cas przygotował: [email protected] Laboratorium IBM DB2 – Wydajność 2 where c1.type='sent' and c2.type='rent' group by c1.cas having count(distinct c1.data)>count(distinct c2.data); Uruchom zapytanie – sprawdź liczbę wierszy i czas wykonania. Sprawdź czas wykonania tego zapytania za pomocą db2batch Sprawdź przewidywany czas wykonania za pomocą db2advis Porównaj czasy obu rozwiązań Pytanie: dlaczego drugie zapytanie zwraca mniej odczynników niż pierwsze? Zidentyfikuj jakie odczynniki są pomijane i zmodyfikuj zapytanie q1b tak , aby zwracało te same odczynniki co zapytanie q1a Zadanie2 Znajdź, które odczynniki mają parametry wszystkich typów. Rozwiązanie 1 – tak jak na wykładzie z Baz Danych (q2a): select cas,type,data from casdat c1 where not exists( select distinct type from casdat c2 where type not in (select type from casdat c3 where c3.cas=c1.cas) ); Uruchom zapytanie. Gdy Ci się znudzi oczekiwanie – przerwij wykonanie (Ctr-C) i przejdź do następnego punktu. Sprawdź przewidywany czas wykonania za pomocą db2advis. Rozwiązanie 2 (q2b): select cas, count(distinct type) from casdat group by cas having count(distinct type)=(select count(distinct type) from casdat); Uruchom zapytanie – sprawdź liczbę wierszy i czas wykonania. Sprawdź przewidywany czas wykonania za pomocą db2advis. Porównaj czasy obu rozwiązań. Część 2: Użycie indeksów i statystyk W0: Wykonać zapytanie (select.sql): select c0.cas,c0.data,c.data from casdat c0, casdat c where c0.type='name' and c0.cas = c.cas and c.type='rent' and c.data like '%12%' group by c0.cas,c0.data,c.data order by c0.cas; 1. Uruchomić dla tego zapytania program DB2 Workload Preformance Advisor: db2advis –d test –i select.sql 2. Przeanalizować wynik i zapamiętując wartość pola „Liczba jednostek timeron” oraz zalecenia Advisora dotyczące indeksów. 3. Uruchomić dla tego samego zapytania program Benchmark. db2batch –d test –f select.sql 4. Przeanalizować wynik zapamiętując czas wykonania. Powtórzyć kroki 1-4 po każdym punkcie W1-W8 poniżej, zapamiętując wyniki: W1: Stworzyć statystyki dla tabeli (runstats on table db2labX.casdat) W2: Stworzyć indeks na pole type create index ind_type on casdat (type asc) W3: Stworzyć statystyki dla indeksu: przygotował: [email protected] Laboratorium IBM DB2 – Wydajność 3 runstats on table db2labX.casdat for index db2labX.ind_type W4: Stworzyć index ind_tcd create index ind_tcd on casdat (type asc, cas asc, data asc) W5: Utworzyć statystyki dla indeksu runstats on table db2labX.casdat for index db2labX.ind_tcd W6: Stworzyć drugi indeks na pola data, type, cas (ind_dtc): create index ind_dtc on casdat(data asc, type asc, cas asc) W7: Usunąć indeksy ind_type i ind_tcd (drop index ind_type) W8: Utworzyć statystyki dla indeksu ind_dtc runstats on table db2labX.casdat for index db2labX.ind_dtc Podsumować osiągnięte rezultaty i wyciągnąć wnioski. Część 3: Użycie event monitora Usunąć wszystkie indeksy Usunąć (o ile jest) katalog ~/temp (rmdir temp) Stworzyć katalog ~/temp (mkdir temp) Stworzyć monitor zdarzeń (event monitor): create event monitor mymon1 for database, statements write to file ‘/home/db2labX/temp’ Uaktywnić monitor (set event monitor mymon1 STATE=1) Wykonać zapytanie z pliku (db2 –tvf select.sql) Wyłączyć monitor (set event monitor mymon1 STATE=0) Zapamiętać zarejestrowane zdarzenia do pliku e1.txt (db2evmon –path /home/db2labX/temp > evmon.txt) Znaleźć w pliku zdarzenia odpowiadające operacjom: prepare, open, describe, close dla zapytania i zapamiętać ich czasy wykonania (C1). Stworzyć indeks ind_type oraz statystyki dla tego indeksu: create index ind_type on casdat (type asc); runstats on table db2labX.casdat for index db2labX.ind_type Uaktywnić monitor Wykonać zapytanie z pliku Wyłączyć monitor Zapamiętać zdarzenia do pliku evmon.txt Znaleźć w pliku zdarzenia odpowiadające operacjom: prepare, open, describe, close dla zapytania i zapamiętać ich czasy wykonania (C2) Stworzyć indeks ind_tcd oraz statystyki dla tego indeksu: create index ind_tcd on casdat (type asc, cas asc, data asc); runstats on table db2labX.casdat for index db2labX.ind_tcd Uaktywnić monitor Wykonać zapytanie z pliku Wyłączyć monitor Zapamiętać zdarzenia do pliku evmon.txt Znaleźć w pliku zdarzenia odpowiadające operacjom: prepare, open, describe, close dla zapytania i zapamiętać ich czasy wykonania (C3) Porównać czasy wykonania dla danych indeksowanych i bez indeksów (C1,C2 i C3) przygotował: [email protected]