420 likes | 528 Views
Systemy zarządzania bazami danych. 11. Strojenie zamków. Strojenie trzewne. Współbieżność Jak zminimalizować rywalizację o zamki ? Odtwarzanie Jak przyspieszyć zapisy do dziennika (zrzuty) ? System operacyjny Jak dobrać wielkość buforów, planowanie procesora... Sprzęt
E N D
Systemy zarządzania bazami danych 11. Strojenie zamków
Strojenie trzewne • Współbieżność • Jak zminimalizować rywalizację o zamki? • Odtwarzanie • Jak przyspieszyć zapisy do dziennika (zrzuty)? • System operacyjny • Jak dobrać wielkość buforów, planowanie procesora... • Sprzęt • Jak przydzielić procesor, pamięć, przestrzeń dyskową? 11. Strojenie zamków
Wydajność Redukcja zamków: transakcja czeka, aż inna transakcja zwolni zamek Unikanie zakleszczeń: transakcje wzajemnie czekają na zwolnienie zamków Poprawność Szeregowalność: transakcja działa tal jakby była izolowana od innych Programista ma zapewnić, że wykonanie szeregowe jest poprawne. Cele strojenia współbieżności Kompromis między wydajnością i poprawnością 11. Strojenie zamków
Idealna transakcja • Potrzebuje niewielu zamków i woli dzielone od wyłącznych • Redukuje liczbę konfliktów – są one wynikiem zamków dzielonych • Żąda zamków o małej ziarnistości • Redukuje zakres potencjalnych konfliktów • Utrzymuje zamki przez krótki czas • Redukuje czas oczekiwania 11. Strojenie zamków
Strojenie zamków • Podział transakcji • Popraw aplikacje, żeby poprawić wydajność zamków • Poziomy izolacji • Zmniejsz poprawność by poprawić wydajność • Narzuty powodowane przez zamki • Nieunikniony koszt stosowania zamków • Wąskie gardła • Korzystanie z udogodnień systemowych, aby rozpychać wąskie gardła 11. Strojenie zamków
Przykład: Zwykłe zakupy • Kup towar I za cenę P • Jeśli gotówka < P, wycofaj transakcję • Magazyn(I) := Magazyn(I)+P • Gotówka := Gotówka – P • Dwie transakcje zakupu P1 i P2 • W P1 towar I ma cenę 50 • W P2 towar I ma cenę 75 • Gotówki mamy 100 11. Strojenie zamków
Zwykłe zakupy – analiza • Jeśli 1-2-3 to jedna transakcja, P1 albo P2 musi być wycofana • Jeśli 1-2-3 to trzy różne transakcje: • P1 sprawdza, czy gotówka 50?Tak. • P2 sprawdza, czy gotówka 75?Tak. • P1 kończy. Gotówka = 50. • P2 kończy. Gotówka = –25. 11. Strojenie zamków
Zwykłe zakupy – rozwiązania • Ortodoksyjne • Cały program to jedna transakcja • Sprawdzenie stanu gotówki staje się wąskim gardłem! • Podziałowe • Znajdź sposób na reorganizację i podziel transakcję tak, aby nie złamać szeregowalności 11. Strojenie zamków
Zwykłe zakupy – podział • Podzielone: • Jeśli gotówka < P, wycofaj transakcję Gotówka := Gotówka – P • Magazyn(I) := Magazyn(I)+P • Wykonanie podzielonych: • P11: 100 > 50. Gotówka := 50. • P21: 75 > 50. Wycofanie. • P12: Magazyn(I) := Magazyn(I) + 50. 11. Strojenie zamków
Dzielenie transakcji • Reguły wykonawcze: • Fragmenty są wykonywane według porzadku częściowego zdefiniowanego przez „dużą” transakcję • Jeśli fragment jest wycofywany z powodu konfliktu, jest ponawiany aż do skutku (zatwierdzenia) • Jeśli fragment jest wycofywany z powodu polecenia abort, żaden inny fragment nie zostanie już wykonany 11. Strojenie zamków
Bezpieczeństwo wycofania • Podział T jest bezpieczny ze względu na wycofania jeśli • T nie zawiera polecenia abortLUB • Wszystkie polecenia abort są w pierwszym fragmencie podziału 11. Strojenie zamków
Poprawność podziału • Graf podziału (jak graf kolejności transakcji): • Wierzchołki to fragmenty • Krawędzie K (konflikt): Między dwoma fragmentami różnych transakcji jest krawędź K, wtw. działają na tym samym obiekcie i jedną z operacji jest zapis • Krawędzie B (bliźniaki): Między dwoma fragmentami tej samej transakcji jest krawędź B • Cykl K-B to cykl złożony z co najmniej jednej krawędzi B i jednej K 11. Strojenie zamków
T1: r(x) w(x) r(y) w(y) T2: r(x) w(x) T3: r(y) w(y) T1 T2 T3 Poprawność podziału: przykłady • Podział jest poprawny gdy jest bezpieczny ze względu na wycofania nie zawiera cyklu K-B T11: r(x) w(x) T12: r(y) w(y) T11: r(x) T12: w(x)T13: r(y) w(y) B T11 T12 B B T11 T12 T13 K K T2 T3 K K K T2 T3 POPRAWNY 11. Strojenie zamków NIEPOPRAWNY
Przykład podziału T1: RW(A) RW (B) T2: RW(D) RW(B) T3: RW(E) RW(C) T4: R(F) T5: R(E) T6: R(A) R(F) R(D) R(B) R(E) R(G) R(C) 11. Strojenie zamków
Przykład podziału – graf T61: R(A) R(F) R(D) R(B) T62: R(E) R(G) R(C) K T1 T2 T3 K ? T5 K T4 K K B T61 T62 11. Strojenie zamków
Podział lokalny • Lokalny podział transakcji Ti, oznaczany lokalny(Ti) to zbiór fragmentów {ci1, ci2, …, cik} takich, że: • {ci1, ci2, …, cik} jest podziałem bezpiecznym ze względu na wycofanie • Nie ma cykli K-B w grafie o wierzchołkach{T1, …, Ti-1, ci1, ci2, …, cik, Ti+1, … Tn} • Podział złożony z {lokalny(T1), lokalny(T2), …, lokalny(T2)} jest bezpieczny ze względu na wycofania i nie ma cykli K-B. 11. Strojenie zamków
Najdokładniejszy podział • Wejście: T, {T1, .. Tn-1} • Inicjacja • Jeśli są polecenia abort • p1 := wszystkie zapisy T (i nieprzestawialne odczyty), które mogą nastąpić przed lub równolegle z dowolnym poleceniem abort w T • W przeciwnym przypadku: • p1 := pierwszy dostęp do bazy danych • P := {x | x operacja na bazie danych spoza p1} • P := P {p1} 11. Strojenie zamków
Najdokładniejszy podział c.d. • Scalanie fragmentów • Znajdź spójne fragmenty grafu podziału tylko na podstawie cykli K transakcji {T1, …, Tn-1} i fragmentów P. • Popraw P korzystając z reguły: • Jeśli p_j i p_k są w tej samej spójnej składowej oraz j < k, to • Dodajoperacje p_k do p_j • Usuń p_k z P 11. Strojenie zamków
Strojenie zamków • Podział transakcji • Popraw aplikacje, żeby poprawić wydajność zamków • Poziomy izolacji • Zmniejsz poprawność by poprawić wydajność • Narzuty powodowane przez zamki • Nieunikniony koszt stosowania zamków • Wąskie gardła • Korzystanie z udogodnień systemowych, aby rozpychać wąskie gardła 11. Strojenie zamków
Poświęć izolację dla wydajności? • Transakcja, która trzyma zamki w czasie interakcji ekranowej jest potencjalnym wąskim gardłem. • Rezerwacje lotnicze • Pobierz listę wolnych miejsc • Ustal z klientem, co wybiera • Zarezerwuj miejsce • Jedna transakcja 1-2-3 jest niedopuszczalna, bo będzie trzymała zamek na wszystkich wolnych miejscach • Umieszczaj interakcję z użytkownikiem poza kontekstem transakcyjnym • Problem: wybrane miejsce zostało już w międzyczasie zajęte. Linie lotnicze tolerują (i planują!) overbooking 11. Strojenie zamków
Poziomy izolacji • Odczyt niezatwierdzony (Brak utraty modyfikacji) • Zamki wyłączne blokują zapisy innych transakcji na czas transakcji piszącej • Zamki do zapisu trzymane do zatwierdzenia. Brak zamków do odczytu • Odczyt zatwierdzony (Brak brudnego odczytu) • Zamki do zapisu trzymane do zatwierdzenia • Zamki dzielone zwalniane natychmiast po zakończeniu odczytu • Odczyt powtarzalny (Brak odczytu niepowtarzalnego) • Ścisłe 2PL – zamki zapisowe i odczytowe trzymane do końca transakcji • Szeregowalność (Brak fantomów) • Zamki na całych tabelach lub na węzłach indeksów, żeby uniknąć fantomów 11. Strojenie zamków
Problem fantomów Przykład: relacja R (E#,nazwisko,…) więzy: E# to klucz zamki zakładane na wierszach R E# nazwisko …. o1 55 Alef o2 75 Bet 11. Strojenie zamków
T1: Wstaw <99,Gimel,…> do RT2: Wstaw <99,Dalet,…> do R T1 T2 S1(o1)S2(o1) S1(o2)S2(o2) Sprawdź więzy Sprawdź więzy Wstaw o3[99,Gimel,..] Wstaw o4[99,Dalet,..] ... ... 11. Strojenie zamków
Rozwiązania problemu fantomów • Zamki na tabelach • Koniec problemów • Koniec współbieżności • Zamki na węzłach indeksu • Zamykanie zakresowe (zamek na wartości klucza indeksu) • Bardziej złożone • Więcej współbieżności 11. Strojenie zamków
Każda transakcja działa na obrazie danych zatwierdzonych do chwili jej rozpoczęcia: Nie ma zamków przy odczycie Zamki przy zapisie Koszt pamięciowy (trzeba przechowywać stare wersje) Prawie szeregowalność: T1: x:=y T2: y:= x Początkowo x=3 i y =17 Wykonanie szeregowe: x,y=17 or x,y=3 Izolacja migawkowa: x=17, y=3, jeśli obie transakcje zaczęły się w tej samej chwili R(Y) zwraca 1 R(Z) zwraca 0 R(X) zwraca 0 T1 W(Y:=1) W(X:=2, Z:=3) T2 T3 CZAS X=Y=Z=0 Izolacja migawkowa 11. Strojenie zamków
Cena szeregowalności– dane Środowisko: accounts( number, branchnum, balance); create clustered index c on accounts(number); • 100000 wierszy • Pusty bufor; wielkosc bufor taka sama na wszystkich systemach • Zamki na wierszach • Poziom izolacji (SERIALIZABLE lub READ COMMITTED) • SQL Server 7, DB2 v7.1 and Oracle 8i on Windows 2000 • Dual Xeon (550MHz,512Kb), 1Gb RAM, Internal RAID controller from Adaptec (80Mb), 4x18Gb drives (10000RPM), Windows 2000. 11. Strojenie zamków
Cena szeregowalności – transakcje • Współbieżne transakcje: • T1: zapytanie sumujące [1 wątek] select sum(balance) from accounts; • T2: podmień salda dwóch kont (w takim porządku jak odczyty, by uniknąć zakleszczeń) [N watków] valX:=select balance from accounts where number=X;valY:=select balance from accounts where number=Y;update accounts set balance=valX where number=Y;update accounts set balance=valY where number=X; 11. Strojenie zamków
SQL Server i DB2 sumacja daje bledne wyniki na poziomie READ COMMITED (domyslne ustawienie) Oracle zawsze daje poprawne wyniki (izolacja migawkowa), ale uwaga na podmiany Cena seregowalności– wyniki 11. Strojenie zamków
Modyfikacje są w konflikcie z sumacją, więc poprawność wyników uzyskuje się kosztem mniejszej współbieżności, więc i mniejszej przepustowości Cena seregowalności– wyniki 11. Strojenie zamków
Strojenie zamków • Podział transakcji • Popraw aplikacje, żeby poprawić wydajność zamków • Poziomy izolacji • Zmniejsz poprawność by poprawić wydajność • Narzuty powodowane przez zamki • Nieunikniony koszt stosowania zamków • Wąskie gardła • Korzystanie z udogodnień systemowych, aby rozpychać wąskie gardła 11. Strojenie zamków
Tablica zamków ... A • Jeśli obiektu nie ma w tej tablicy haszującej, to jest niezamknięty A Informacja o zamkach na A H ... 11. Strojenie zamków
Zamki w SQL Server 7 syslockinfo dbid objid spid ziarnistość tryb właściciel oczekujący 1 117 RID X 10 LW1, LW4 LO1 10 1 117 PAG IX LO1 LW3 1 117 TAB IX LO1 10 LW2 1 118 RID S LO2, LO3 10 Właściciel zamka – 32 bajtyOczekujący na zamek – 32 bajty Zamek – 32 bajty 11. Strojenie zamków
Zamki w Oracle 8i Struktura kolejki zamków(stała tablica – domyślnie 4 pozycje na transakcję) Proces T1 H Tablica zainteresowanych transakcji(stała wielkość - INITRANS – MAXTRANS) T1 Tablica kolejki zamków wiersz ZamekT2 Zamek T1 Zamek T3 Strona danych Oczekiwanie na kolejkę (limit ~ 3sekundy) Wykrywanie zakleszczeń 11. Strojenie zamków
Narzuty zamków– dane Środowisko: accounts( number, branchnum, balance); create clustered index c on accounts(number); • 100000 wiersze • Stały bufor • SQL Server 7, DB2 v7.1 and Oracle 8i on Windows 2000 • Brak promocji zamków w Oracle; Parametry DB2 ustawione, żeby nie było promocji zamków; brak takiej kontroli w SQL Server. • Dual Xeon (550MHz,512Kb), 1Gb RAM, Internal RAID controller from Adaptec (80Mb), 4x18Gb drives (10000RPM), Windows 2000. 11. Strojenie zamków
Narzuty zamków – transakcje Bez współbieżności: • Modyfikacja [10 000 razy]update accounts set balance = Val; • Wstawienie [10 000 razy], np. takie typowe:insert into accounts values(664366,72255,2296.12); 11. Strojenie zamków
Zamki wierszowe są trochę droższe niż zamki tabelowe ponieważ narzuty związane z odtwarzaniem są większe niż narzuty zamków Wyjątkiem są modyfikacje w DB2 gdzie zamki tabelowe są wyraźnie tańsze niż wierszowe Narzuty zamków 11. Strojenie zamków
Strojenie zamków • Podział transakcji • Popraw aplikacje, żeby poprawić wydajność zamków • Poziomy izolacji • Zmniejsz poprawność by poprawić wydajność • Narzuty powodowane przez zamki • Nieunikniony koszt stosowania zamków • Wąskie gardła • Korzystanie z udogodnień systemowych, aby rozpychać wąskie gardła 11. Strojenie zamków
Waskie gardło: generowaneklucze • Rozwazmy aplikację, w której korzystamy z generowanych kolejno wartości jako kluczy, np. numerów faktur • Rozwiązanie naiwne: oddzielna tabela, która trzyma ostatni numer faktury. Każda transakcja pobiera i modyfikuje ten wiersz • Rozwiązanie licznikowe: uzyj udogodnienia systemowego takiego jak sekwencja (Oracle) lub kolumna autonumerowana (SQL Server) 11. Strojenie zamków
Zatrzaski i zamki • Zamki są używane do kontroli wspolbieznosci • Żądania zamków są kolejkowane • Kolejka priorytetowe • Struktura tablicy zamków • Tryb, obiekt, ziarnistość, id transakcji • Zatrzaski sluzą do zapewnienia wzajemnego wykluczania • Ządanie zatrzasku udaje się lub nie • Aktywne czekanie na zatrzaski przy wielu procesorach • Pojedyncze miejsce w pamieci • Mechanizm Test&Set do obsługi zatrzaskow 11. Strojenie zamków
Wartość liczników – dane Środowisko: • Domyślny poziom izolacji: READ COMMITTED; Puste tabele • Dual Xeon (550MHz,512Kb), 1Gb RAM, Internal RAID controller from Adaptec (80Mb), 4x18Gb drives (10000RPM), Windows 2000. accounts( number, branchnum, balance); create clustered index c on accounts(number); counter ( nextkey ); insert into counter values (1); 11. Strojenie zamków
Wartość liczników – transakcje Bez współbieżności: • Udogodnienie systemowe [100 000 wstawień, N wątków] • SQL Server 7 (kolumna Identity) insert into accounts values (94496,2789); • Oracle 8i (sekwencja) insert into accounts values (seq.nextval,94496,2789); • Rozwiązanie naiwen [100 000 wstawien, N wątków]begin transactionNextKey:=select nextkey from counter; update counter set nextkey = NextKey+1;commit transactionbegin transaction insert into accounts values(NextKey,?,?);commit transaction 11. Strojenie zamków
Liczniki oferowane przez SZBD o niebo lepsze od rozwiązań naiwnych Sekwencja Oracle może stać się waskim gardlem jeśli kazde pobranie jest zapisywane na dysk, ale można stosować CACHE sekwencji CREATE SEQUENCE seq CACHE 20; Liczniki mogą gubic wartości Unikaj wąskiego gardła – liczniki 11. Strojenie zamków