Transcript wyklad11

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ą?
Oryginał: Shasha & Bonnet
11. Strojenie zamków
2
Cele strojenia współbieżności
• Poprawność
• Wydajność
– Redukcja zamków:
transakcja czeka, aż
inna transakcja zwolni
zamek
– Unikanie zakleszczeń:
transakcje wzajemnie
czekają na zwolnienie
zamków
– Szeregowalność:
transakcja działa tal
jakby była izolowana od
innych
– Programista ma
zapewnić, że wykonanie
szeregowe jest
poprawne.
Kompromis między wydajnością i poprawnością
Oryginał: Shasha & Bonnet
11. Strojenie zamków
3
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
4
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
5
Przykład: Zwykłe zakupy
•
Kup towar I za cenę P
1. Jeśli gotówka < P, wycofaj transakcję
2. Magazyn(I) := Magazyn(I)+P
3. 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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
6
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
– P2
– P1
– P2
sprawdza, czy gotówka  50? Tak.
sprawdza, czy gotówka  75? Tak.
kończy. Gotówka = 50.
kończy. Gotówka = –25.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
7
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
8
Zwykłe zakupy – podział
•
Podzielone:
1. Jeśli gotówka < P, wycofaj transakcję
Gotówka := Gotówka – P
2. Magazyn(I) := Magazyn(I)+P
•
Wykonanie podzielonych:
– P11: 100 > 50. Gotówka := 50.
– P21: 75 > 50. Wycofanie.
– P12: Magazyn(I) := Magazyn(I) + 50.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
9
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
10
Bezpieczeństwo wycofania
•
Podział T jest bezpieczny ze względu
na wycofania jeśli
1. T nie zawiera polecenia abort
LUB
2. Wszystkie polecenia abort są w
pierwszym fragmencie podziału
Oryginał: Shasha & Bonnet
11. Strojenie zamków
11
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
12
Poprawność podziału: przykłady
• Podział jest poprawny gdy jest
bezpieczny ze względu na wycofania nie
zawiera cyklu K-B
T1: r(x) w(x) r(y) w(y)
T2: r(x) w(x)
T3: r(y) w(y)
T11
K
T1
T2
T11: r(x) w(x)
T12: r(y) w(y)
B
T12
Oryginał: Shasha & Bonnet
T11
K
T2
T3
T11: r(x)
T12: w(x)
T13: r(y) w(y)
T3
POPRAWNY
11. Strojenie zamków
K
B
T12
K
B
T13
K
T2
T3
13
NIEPOPRAWNY
Przykład podziału
T1:
T2:
T3:
T4:
T5:
T6:
RW(A) RW (B)
RW(D) RW(B)
RW(E) RW(C)
R(F)
R(E)
R(A) R(F) R(D) R(B) R(E) R(G) R(C)
Oryginał: Shasha & Bonnet
11. Strojenie zamków
14
Przykład podziału – graf
T61: R(A) R(F) R(D) R(B)
T62: R(E) R(G) R(C)
T1
K
K
K
T61
Oryginał: Shasha & Bonnet
T2
T4
K
T3
T5
K
B
11. Strojenie zamków
?
T62
15
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.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
16
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}
Oryginał: Shasha & Bonnet
11. Strojenie zamków
17
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
– Dodaj operacje p_k do p_j
– Usuń p_k z P
Oryginał: Shasha & Bonnet
11. Strojenie zamków
18
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
19
Poświęć izolację dla wydajności?
• Transakcja, która trzyma zamki w czasie interakcji
ekranowej jest potencjalnym wąskim gardłem.
– Rezerwacje lotnicze
1. Pobierz listę wolnych miejsc
2. Ustal z klientem, co wybiera
3. 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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
20
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
21
Problem fantomów
Przykład: relacja R (E#,nazwisko,…)
więzy: E# to klucz
zamki zakładane na wierszach
R
o1
o2
E# nazwisko ….
55 Alef
75 Bet
Oryginał: Shasha & Bonnet
11. Strojenie zamków
22
T1: Wstaw <99,Gimel,…> do R
T2: Wstaw <99,Dalet,…> do R
T2
T1
S1(o1)
S1(o2)
Sprawdź więzy
S2(o1)
S2(o2)
Sprawdź więzy
...
...
Wstaw o3[99,Gimel,..]
Wstaw o4[99,Dalet,..]
Oryginał: Shasha & Bonnet
11. Strojenie zamków
23
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
24
Izolacja migawkowa
• 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)
T1
• Prawie szeregowalność:
T2
– T1: x:=y
– T2: y:= x
– Początkowo x=3 i y =17
– Wykonanie szeregowe:
x,y=17 or x,y=3
X=Y=Z=0
– Izolacja migawkowa:
x=17, y=3, jeśli obie transakcje
zaczęły się w tej samej chwili
Oryginał: Shasha & Bonnet
11. Strojenie zamków
T3
CZAS
25
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.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
26
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;
Oryginał: Shasha & Bonnet
11. Strojenie zamków
27
Cena seregowalności – wyniki
Ratio of correct
answers
SQLServer
1
0.8
0.6
0.4
0.2
0
read committed
serializable
0
2
4
6
8
10
Concurrent update threads
Ratio of correct
answers
Oracle
1
0.8
0.6
0.4
0.2
0
read committed
serializable
0
2
4
6
8
Concurrent update threads
Oryginał: Shasha & Bonnet
10
• 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
11. Strojenie zamków
28
Cena seregowalności – wyniki
Throughput
(trans/sec)
SQLServer
0
2
4
6
8
read committed
Concurrent Update Threads
serializable
10
Throughput
(trans/sec)
Oracle
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
read committed
serializable
0
2
4
6
8
10
Concurrent Update Threads
Oryginał: Shasha & Bonnet
11. Strojenie zamków
29
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
30
Tablica zamków
H
...
A
A
Informacja o zamkach na A
...
• Jeśli obiektu nie ma w tej tablicy
haszującej, to jest niezamknięty
Oryginał: Shasha & Bonnet
11. Strojenie zamków
31
Zamki w SQL Server 7
syslockinfo
spid dbid objid
ziarnistość
tryb
właściciel
10 1
117
RID
X
LO1
10 1
117
PAG
IX
LO1
10 1
117
TAB
IX
LO1
10 1
118
RID
S
Zamek – 32 bajty
Oryginał: Shasha & Bonnet
LO2, LO3
oczekujący
LW1, LW4
LW3
LW2
Właściciel zamka – 32 bajty
Oczekujący na zamek – 32 bajty
11. Strojenie zamków
32
Zamki w Oracle 8i
Struktura kolejki zamków
(stała tablica – domyślnie 4 pozycje na transakcję)
Proces
T1
H
Tablica zainteresowanych transakcji
T1
(stała wielkość - INITRANS – MAXTRANS)
Tablica kolejki zamków
Zamek
T2
Zamek
T1
wiersz
Zamek
T3
Strona danych
Oczekiwanie na kolejkę
(limit ~ 3 sekundy)
Oryginał: Shasha & Bonnet
Wykrywanie zakleszczeń
11. Strojenie zamków
33
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.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
34
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);
Oryginał: Shasha & Bonnet
11. Strojenie zamków
35
Narzuty zamków
Throughput ratio
(row locking/table locking)
1
0.8
db2
sqlserver
oracle
0.6
0.4
0.2
0
update
insert
Oryginał: Shasha & Bonnet
• 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
11. Strojenie zamków
36
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
37
Waskie gardło: generowane klucze
• 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)
Oryginał: Shasha & Bonnet
11. Strojenie zamków
38
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
Oryginał: Shasha & Bonnet
11. Strojenie zamków
39
Wartość liczników – dane
Środowisko:
accounts( number, branchnum, balance);
create clustered index c on accounts(number);
counter ( nextkey );
insert into counter values (1);
– 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.
Oryginał: Shasha & Bonnet
11. Strojenie zamków
40
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 transaction
NextKey:=select nextkey from counter;
update counter set nextkey = NextKey+1;
commit transaction
begin transaction
insert into accounts values(NextKey,?,?);
commit transaction
Oryginał: Shasha & Bonnet
11. Strojenie zamków
41
Unikaj wąskiego gardła – liczniki
Throughput
(statements/sec)
SQLServer
system
ad-hoc
0
10
20
30
40
50
Number of concurrent insertion threads
Throughput
(statements/sec)
Oracle
CREATE SEQUENCE seq CACHE 20;
system
ad-hoc
0
10
20
30
40
• 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
• Liczniki mogą gubic wartości
50
Oryginał:Number
Shasha
& Bonnet
of concurrent
insertion threads11. Strojenie zamków
42