Download - Systemy zarządzania bazami danych
![Page 1: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/1.jpg)
Systemy zarządzania bazami danych
11. Strojenie zamków
![Page 2: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/2.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 2
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ą?
![Page 3: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/3.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 3
Cele strojenia współbieżności
• 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.
Kompromis między wydajnością i poprawnością
![Page 4: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/4.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 4
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
![Page 5: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/5.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 5
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
![Page 6: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/6.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 6
Przykład: Zwykłe zakupy
• Kup towar I za cenę P1. Jeśli gotówka < P, wycofaj transakcję2. Magazyn(I) := Magazyn(I)+P3. 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
![Page 7: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/7.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 7
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.
![Page 8: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/8.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 8
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
![Page 9: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/9.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 9
Zwykłe zakupy – podział
• Podzielone:1. Jeśli gotówka < P, wycofaj transakcję
Gotówka := Gotówka – P2. Magazyn(I) := Magazyn(I)+P
• Wykonanie podzielonych:– P11: 100 > 50. Gotówka := 50.– P21: 75 > 50. Wycofanie.– P12: Magazyn(I) := Magazyn(I) + 50.
![Page 10: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/10.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 10
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
![Page 11: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/11.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 11
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
![Page 12: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/12.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 12
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
![Page 13: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/13.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 13
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)
T1
T2 T3
T11: r(x) w(x)T12: r(y) w(y)
T11 T12
T3T2
B
K K
T11: r(x) T12: w(x)T13: r(y) w(y)
T12 T13
T3T2
B
K K
T11B
K
POPRAWNY
NIEPOPRAWNY
![Page 14: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/14.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 14
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)
![Page 15: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/15.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 15
Przykład podziału – graf
T1 T2
T4 T5
T3
T62T61
T61: R(A) R(F) R(D) R(B)
T62: R(E) R(G) R(C)
K K
KK
K
B?
![Page 16: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/16.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 16
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.
![Page 17: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/17.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 17
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}
![Page 18: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/18.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 18
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
![Page 19: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/19.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 19
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
![Page 20: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/20.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 20
Poświęć izolację dla wydajności?
• Transakcja, która trzyma zamki w czasie interakcji ekranowej jest potencjalnym wąskim gardłem.
– Rezerwacje lotnicze1. Pobierz listę wolnych miejsc2. Ustal z klientem, co wybiera3. 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
![Page 21: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/21.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 21
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
![Page 22: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/22.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 22
Przykład: relacja R (E#,nazwisko,…)więzy: E# to kluczzamki zakładane na wierszach
RE# nazwisko….o1 55 Alefo2 75 Bet
Problem fantomów
![Page 23: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/23.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 23
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,..]
... ...
![Page 24: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/24.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 24
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
![Page 25: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/25.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 25
Izolacja migawkowa
T1
T2
T3
CZAS
R(Y) z
wraca 1
R(Z) zwrac
a 0
R(X) z
wraca 0
W(Y:=1)
W(X:=2, Z
:=3)
X=Y=Z=0
• 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
![Page 26: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/26.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 26
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.
![Page 27: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/27.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 27
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;
![Page 28: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/28.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 28
Cena seregowalności – wyniki
• 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
Oracle
0
0.2
0.4
0.6
0.8
1
0 2 4 6 8 10
Concurrent update threads
Rat
io o
f cor
rect
an
swer
s read committed
serializable
SQLServer
0
0.2
0.4
0.6
0.8
1
0 2 4 6 8 10
Concurrent update threads
Rat
io o
f cor
rect
an
swer
s
read committed
serializable
![Page 29: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/29.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 29
Cena seregowalności – wyniki
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
Oracle
0 2 4 6 8 10
Concurrent Update Threads
Thro
ughp
ut
(tra
ns/s
ec)
read committed
serializable
SQLServer
0 2 4 6 8 10
Concurrent Update Threads
Th
rou
gh
pu
t (t
ran
s/se
c)
read committed
serializable
![Page 30: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/30.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 30
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
![Page 31: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/31.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 31
A
• Jeśli obiektu nie ma w tej tablicy haszującej, to jest niezamknięty
Informacja o zamkach na AA
......
H
Tablica zamków
![Page 32: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/32.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 32
Zamki w SQL Server 7
syslockinfo
dbid objid ziarnistość właściciel oczekującytryb
1 117 RID X
1 117 PAG IX
1 117 TAB IX
1 118 RID S
LO1
LO1
LO1
LO2, LO3 LW2
LW3
spid
10
10
10
10
Zamek – 32 bajty Właściciel zamka – 32 bajtyOczekujący na zamek – 32 bajty
LW1, LW4
![Page 33: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/33.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 33
Zamki w Oracle 8i
Strona danych
wiersz
Tablica zainteresowanych transakcji (stała wielkość - INITRANS – MAXTRANS)
T1
Zamek T1
Struktura kolejki zamków (stała tablica – domyślnie 4 pozycje na transakcję)
T1
Tablica kolejki zamków
ZamekT2
Oczekiwanie na kolejkę (limit ~ 3 sekundy)
Proces
Zamek T3
Wykrywanie zakleszczeń
H
![Page 34: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/34.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 34
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.
![Page 35: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/35.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 35
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);
![Page 36: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/36.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 36
0
0.2
0.4
0.6
0.8
1
update insert
Thro
ughp
ut ra
tio
(row
lock
ing/
tabl
e lo
ckin
g)
db2
sqlserver
oracle
Narzuty 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
![Page 37: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/37.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 37
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
![Page 38: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/38.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 38
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)
![Page 39: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/39.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 39
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
![Page 40: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/40.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 40
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);
![Page 41: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/41.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 41
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 transactionbegin transaction insert into accounts values(NextKey,?,?);commit transaction
![Page 42: Systemy zarządzania bazami danych](https://reader036.vdocuments.pub/reader036/viewer/2022062722/56813ae0550346895da32fbc/html5/thumbnails/42.jpg)
Oryginał: Shasha & Bonnet 11. Strojenie zamków 42
Unikaj wąskiego gardła – liczniki
• 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
SQLServer
0 10 20 30 40 50
Number of concurrent insertion threads
Th
rou
gh
pu
t (s
tate
me
nts
/se
c)
system
ad-hoc
Oracle
0 10 20 30 40 50
Number of concurrent insertion threads
Th
rou
gh
pu
t (s
tate
men
ts/s
ec)
system
ad-hoc