RNDr. Jakub Lokoč, Ph.D.
Transkript
3. Teorie
uspořádatelnosti
2. Modely
transakcí
4. Plánování
běhu transakcí
RNDr. Jakub Lokoč, Ph.D.
5. Alternativní
protokoly
6. TP manažer a
zotavení systému
1. TP systémy
7. Distribuované
transakce
1
4
5
6
7
P. A. Bernstein, V. Hadzilacos, N. Goodman,
Concurrency Control and Recovery in Database Systems (1987 !!!)
J. Grey, A. Reuter, Transaction Processing: Concepts and Techniques (1992 !!!)
R. Ramakrishnan, J. Gehrke, Database Management Systems, 3rd edition (2003)
P. A. Bernstein, E. Newcomer, Principles of Transaction Processing, 2nd edition (2009)
U. Özsu, P. Valduriez, Principles of Distributed Database Systems, 3rd edition (2009)
Slajdy od doc. Petra Tůmy
Neoficiální, ale taky dobré zdroje
3
Doporučené zdroje
2
http://wiki.matfyz.cz/index.php?title=Transakce
Ideální je přečíst vše – spousta souvislostí…
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
2
1
2
3
4
5
6
7
Pravděpodobné
Bodovaná písemka (60-75% = 3, 76-90% = 2, 91 – 100% = 1)
Referáty = bonusové body (dle kvality referátu až 10%)
Referáty dobrovolné, ale jen ostře PŘED první písemkou
(cca 20 minut na zadané téma)
Důsledek – možnost získat více než 100% bodů
Nepravděpodobné
Ústní zkoušení po jednom
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
3
1
2
3
4
5
6
Souběžné zpracování velkého množství úloh
nad stejnými daty/objekty
Robustní a spolehlivé systémy odolné proti
chybám
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
4
1
2
3
4
5
6
7
Souběžné zpracování úloh
Propustnost – tisíce úloh za sekundu
Konkurence – úlohy pracují nad stejnými daty
Korektnost – úlohy vidí jen konzistentní data
Odezva – souběžnost příliš nezpomaluje
Paralelismus – maximální využití zdrojů
Zotavitelnost – např. z uváznutí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
5
1
2
3
4
5
6
7
Robustnost a spolehlivost
4/20/2015
Nedochází k výpadkům
Odolnost proti chybám
Z chyb se systém automaticky zotaví
Zachování konzistence dat
Garantovaná spolehlivost (nejsou v tom jen $)
Distribuovaná řešení – škálovatelnost
…
A přitom nízké náklady na vývoj a provoz
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
6
1
2
3
4
5
6
7
Dostupnost systému (Availability)
Podíl přijatelné doby odezvy systému ku celkovému
nabízenému času (měřeno v %)
Systémy se rozdělují na 7 tříd (log101/(1-A))
4/20/2015
Třída
Dostupnost
1 – Unmanaged
90%
2 – Managed
99%
3 – Well-managed
99.9%
4 – Fault-tolerant
99.99%
5 – High-availability
99.999%
Jaderný reaktor
6 – Very-high-availability
99.9999%
Telefonní ústředna
7 – Ultra-availability
99.99999%
Systémy v letadlech
Některé BC práce…
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
1
2
3
4
5
Systém se skládá z SW/HW modulů
Modul má specifikované a zjištěné chování
Sledovaný rozdíl = chybné chování (bug vs. feature)
Selhání/výpadek je způsobeno chybou v kódu (error programátor) nebo selháním systému (failure - havárie)
Zpoždění chyby (error latency) = doba mezi výskytem v
modulu a jejím projevením
Chyba je latentní/efektivní pokud se neprojevila/projevila
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
6
7
8
1
2
3
4
5
6
7
Spolehlivost a dostupnost
MTTF (mean time to failure) - čas do příští chyby
MTTR (mean time to repair) - čas zotavení
Dostupnost modulu = MTTF / (MTTF + MTTR)
Chyba je soft / hard pokud se z ní systém zotaví /
nezotaví
Failfast modul se zastaví hned po detekci chyby
– latentní chyby jsou vzácné
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
9
1
3
4
5
6
7
Životní cyklus informačního systému
chybovost
2
(nasazování)
(dobíhání)
Výpadek proudu (frekvence vs. doba)
Frekvence
čas
doba trvání výpadku („rychlost“ opravy)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
10
1
2
3
4
5
6
7
Nechť A a B jsou nezávislé jevy
P(A and B) = P(A) * P(B)
P(A or B) = P(A) + P(B) - P(A) * P(B)
Pro malé hodnoty P(A) a P(B) výraz P(A)*P(B) zanedbáme
Poruchovost je často nezávislá na době běhu systému
Tzv. memoryless, pak se MT (mean time to event) spočítá
MT(A) = 1 / P(A) ale jen pro hodně malé P(A)
Pro první ze skupiny událostí pak platí vzorec
MT(Group) = 1 / (P(A1) + … + P(An))
MT(N * A) = MT(A) / N (pro události se stejnou MT)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
11
1
2
3
4
5
6
7
Máte dva roky staré levnější auto a dočtete se, že 1 z
1000 dvouletých modelů se ročně rozpadne…
A) Jaký je MTTF vašeho auta?
B) Jaký je poměr selhání za hodinu?
C) Když máte 100 takových aut, jaká je šance, že se
vám jedno z nich rozpadne?
D) Proč je odpověď na první dotaz o tolik větší, než
je záruka auta?
E) Když bude oprava trvat týden, jaká je dostupnost
vašeho auta?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
12
1
2
3
4
5
6
7
Spočítejte dostupnost a spolehlivost newyorské burzy
otevřené 250 dnů v roce, 8 hodin denně. Mezi 1980-90 měla
4 výpadky: 1 den kvůli sněhu, 4 hodiny kvůli požáru, 45
sekund kvůli SW chybě a 3 hodiny kvůli panice na burze.
A) Jaká je její spolehlivost?
B) Dostupnost?
C) Třída dostupnosti?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
13
1
2
3
4
5
6
7
konektory, kabely 1000y MTTF
logické obvody 3-20y MTTF soft/hard=1/1 až10/1
disky u PC 1y MTTF, dražší 5-20y MTTF (ale
hodně záleží na typu chyb, soft read error je
častější, některé chyby jednou za milion let)
workstations 3-5y MTTF, software 1w MTTF
SW: 3 chyby ve 100 řádcích kódu, 100/1 soft/hard
datové spoje v USA 10-9 BER (bit error rate) optika
LAN: většina chyb kvůli protokolům, 3w MTTF
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
14
1
Celý systém spadne, je mimo provoz
Může mít drastické (až fatální) následky
2
3
4
5
6
7
Výpadek systému během dlouho chystané a
neopakovatelné operace („Až mávnu rukou…“)
Výpadek systému v letadle, na letišti
Co stojí za výpadky?
Dnes je HW relativně spolehlivý, navíc chyby většinou
maskuje, dle studií má největší podíl na výpadku SW
HW chyba je navíc často doprovázena SW chybou, chybou
operátora nebo chybou údržby
V USA časté výpadky proudu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
15
1
2
3
4
5
6
7
Předcházení – vývoj bezchybného HW a SW,
snaha minimalizovat chyby
Zotavení při výskytu – oprava latentních nebo
efektivních chyb
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
16
1
2
3
4
5
6
7
HW metody
Zdvojování, N-plexing (porovnání výsledku)
Obvyklé TMR (triple module redundancy)
SW metody
4/20/2015
Metody návrhu (NASA 5000$ na řádek kódu)
Redundantní programování (ala N-plexing)
Defenzivní programování (počítat se vším)
TRANSAKCE
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
17
1
2
3
4
5
6
7
Provede se vše, co je předmětem kontraktu,
jinak se vše vrací na začátek
Ideální kontrakt by byl atomický, tj. „z ruky do
ruky“
Kontrakty se ale většinou skládají z více
atomických operací
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
18
1
2
3
4
5
6
7
Zaplacení částky
Převoz telat z místa A do místa B
Označkování telat
Převoz z místa B do místa C
…
Zde nelze použít forma „z ruky do ruky“
Po zaplacení částky je systém v nekonzistentním stavu
Je potřeba prostředníka, který dohlíží na legálnost
kontraktu (smlouvy, zákony)
Opět problém s konkurencí - kdo platí stáje za telata, když
je částka předána, ale telata jsou ještě v místě A?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
19
1
2
3
4
5
6
7
Vhodně navržený koncept
Splňuje vlastnosti pro spolehlivost a konkurenci
Intuitivní, použitelný v podstatě kdekoliv
▪ Transakce je … cokoliv (Gray – „Už staří Sumerové …“)
▪ Z pohledu PC - jednotka práce nad perzistentními daty
▪ Spuštěný program pracující se sdílenou DB (Bernstein)
Příklady oblastí, které potřebují transakce
4/20/2015
Bankovnictví – převod peněz z účtu na účet
Doprava, obchod – rezervace a platby
Pojišťovny – stažení nových verzí číselníků
Armáda – odpálení jaderné hlavice
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
20
1
2
3
4
5
6
7
Začátek (Begin) – od této chvíle jsou vykonávány
operace transakce, veškeré provedené změny
jsou viditelné až po potvrzení
Potvrzení (Commit) – transakce úspěšně skončila
svou práci, všechny změny provedené transakcí
jsou potvrzeny a zapsány
Zrušení (Abort, Rollback) – vykonávání transakce
je zastaveno (transakcí, databází, spadne
systém), provedené změny nejsou viditelné, ve
výsledku jako by transakce nikdy nezačala
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
21
1
2
3
4
5
6
7
Atomicita (Atomicity)
Vše nebo nic (problém s operacemi typu – odpálení rakety,
výběr peněz z bankomatu)
Konzistence (Consistency)
Korektní transformace stavů
Izolovanost (Isolation)
Nevznikají chyby způsobené souběžným během
Trvanlivost (Durability)
Po potvrzení transakce se výsledky neztratí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
22
1
2
3
4
5
6
7
Atomicita je zásadní pro legálnost kontraktu
Pokud není možné transakci dokončit, je potřeba
vše vrátit zpět – logování všech akcí
Potvrzením je vše stvrzeno, není cesty zpět
Problém s akcemi, které nelze vrátit zpět
Předčasné potvrzení – kompenzační transakce
Havárie – zrušení transakce – kompenzační akce,
někdy ale dost složité (výběr peněz, odpálení hlavice)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
23
1
2
3
4
5
Řeší sama transakce, tj. programátor
Musí platit, že transakce transformuje DB z
konzistentního stavu S1 do druhého S2
Pak je sériové zapojení transakcí OK
6
7
Současně ale spoléhá i na atomicitu a trvanlivost
Při paralelním běhu též na izolaci
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
24
1
2
3
4
5
6
Intuitivně - pokud běží více transakcí současně,
je výsledek stejný, jako kdyby běžely sériově –
jak to zajistit?
Celá teorie kontroly konkurence
4/20/2015
7
Problematika plánovačů
Zamykání
Úrovně izolace
Verzování
…
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
25
1
2
3
4
5
6
7
Po potvrzení je potřeba provést dodatečné
akce, ale může opět dojít k havárii
Zápis dat z cache na disk
Odeslání zpráv
Neodvolatelnost Potvrzení a Zrušení transakce
Nejčastěji implementováno manažery zdrojů
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
26
1
2
3
4
5
6
7
Opakované spouštění jednoduchých i dávkových
operací nad sdílenou DB
Hodně (sofistikovaných) klientů (OLTP)
Vysoká dostupnost systému
Automatizace
Zotavení po havárii
Zajištění stability dat
Vyvažování zátěže
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
27
1
Dávkové zpracování
Time-sharing
Real-time processing
Klinet-server processing
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
2
3
4
5
6
7
28
1
2
3
4
5
Dávkové zpracování
Time-sharing
Real-time
Klient-server
T.O.P.
Data
Soukromá
Soukromá
Soukromá
Sdílená
Sdílená
Doba
Dlouhá
Dlouhá
Velmi krátká
Dlouhá
Krátká
Spolehlivost
Běžná
Běžná
Velmi vysoká
Běžná
Velmi vysoká
Konzistence
Žádná
Žádná
Žádná
Žádná
ACID
Work pattern
Pravidlný
Pravidlný
Náhodný
Náhodný
Náhodný
Počet zařízení
10
100
1.000
100
10.000
Služby
Virtuální proc.
Virtuální proc.
Jednoduché fce
Jednoduché pož.
I složité fce
Kritéria výkonu
Propustnost
Čas odezvy
Čas odezvy
Oboje
Oboje
Dostupnost
Běžná
Běžná
Vysoká
Vysoká
Vysoká
Autorizace pro
Job
Uživatel
Žádná
Požadavek
Požadavek
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
6
7
29
1
2
3
4
5
6
7
Přímé vs. frontované (ví se o existenci fronty)
Jednoduché vs. komplexní transakce
Málo vs. hodně prostředků
Rychlé vs. dlouhotrvající
Nedochází vs. dochází k výměně zpráv
Lokální vs. distribuované transakce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
30
1
2
3
Prostředí, ve kterém se vytváří, spouští a
spravují TP aplikace
Umožňuje vyvíjet levněji TP aplikace
4
5
6
7
Programátorské rozhraní
Nástroje pro monitoring aplikací
Umožní jednoduchou škálovatelnost
Podpora distribuovaných transakcí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
31
1
2
3
4
5
6
7
Spolehlivé a výkonné systémy
Zotavení z HW a SW chyb (SW je problém)
Chybovost modulů se dá odhadovat – míra rizika
Souběžné zpracování velkého počtu úloh
Transakce (ACID)
4/20/2015
Vhodný model splňující požadované vlastnosti
Výpočetní styl vhodný pro hodně aplikací
Implementováno a ověřeno v praxi
TP middleware – efektivní vývoj a správa TP aplikací
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
32
1
2
3
4
5
6
7
Transakční chování požadováno v různých SW systémech,
platformách, architekturách, prostředích
Transakční monitory byly vyvíjeny jako middleware
systémy zajišťující služby, které nebyly v dané době
dostupné v OS nebo jiných podpůrných platformách
Dnes se setkáváme více s pojmem transakční middleware,
představující komplexní balík řešení pro vývoj, řízení a
efektivní práci s transakcemi v distribuovaném prostředí
Transakční zpracování součástí různých standardů (např.
WS-Transactions, XA Interface, OTS, JTA, SCA, …)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
34
1
2
3
4
5
6
7
Vývoj od roku 1950/60
SABRE – rezervační systém od IBM a American Airlines
PARS-Financial, později TPF (ACID sémantika definována aplikací)
Příklady stále ještě používaných TP monitorů
Customer Information Control System (CICS) Transaction Server
Information Management System (IMS)
Tuxedo
ACMS
Pathway TS/MP
Podpora rozhraní do moderních TP prostředí
Web Services wrappers, Java EE connectors, CORBA interfaces
Možnost integrace s .NET Framework a Java EE
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
35
1
Vyvinut v roce 1968 společností IBM
Průkopník mnoha technologií
2
3
4
5
6
7
2PC protokol, transakční RPC
Využívá tzv. regiony (odpovídají procesům)
Vlastní adresový prostor ve kterém simuluje více
vláken (vlastní implementace – musí řešit blokování)
Všechny zdroje jsou v regionu (včetně prezentační
vrstvy) kvůli vysokým nákladům na komunikaci v
tehdejších systémech
Komunikace mezi procesy pomocí synchronního DPL
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
36
1
2
3
4
5
6
7
Vyvinut IBM společně s Rockwell a Caterpillar pro Apollo program
– inventář účtů pro Saturn V, tj. design zaměřen na velkou
hierarchickou DB
Jeden z prvních OLTP (1968), předtím se používalo dávkové
zpracování, které IMS též podporuje
Obsahuje IMS transakční manažer a hierarchický DB systém
(fungují nezávisle na sobě, je možné je použít zvlášť)
Využívá procesy operačního systému, které využívají služby TP
monitoru
Základní IMS TM používá fronty (možno obejít pomocí Fast Path)
Dnešní IMS aplikace používají DB2
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
37
1
Vyvinut AT&T’s Bell Laboratories v roce 1984 pro potřeby
telekomunikačních aplikací, nyní vlastní práva Oracle
Design založen na IMS, původně měl IMS nahradit u US
telekomunikačních společností
Poskytuje dvě hlavní API
2
3
4
5
6
7
CORBA C++ API a Application Transaction Monitor Interface (ATMI), což je
kolekce runtime služeb, které se dají volat přímo z C, C++ a Cobol aplikací
ATMI silně závisí na systémových knihovnách UNIXu a externích službách DB
Služby poskytují podporu pro komunikaci, distribuované transakce a
management systému
Tuxedo bylo základem pro mnoho X/Open DTP standardů (DTP model,
XA, TX, XATMI), implementuje OTS přes své CORBA API
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
38
1
Velká výzva – mnoho existujících architektur, modelů
programování, komunikačních protokolů, integrace, …
Cíle
2
3
4
5
6
7
Portabilita – stejný transakční program na různých transakčních
middleware produktech (TMP)
Interoperabilita – výměna dat a informací během zpracování jedné
transakce na různých TMP
Integrace – umožnění kombinace komponent různých TMP
Příklady – WS-transactions, XA protocol, OTS, JTA
Vztahy mezi standardy
XA protocol je zahrnut v OTS
XA i OTS jsou zahrnuty v JTA
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
39
1
2
3
4
5
6
Rozšiřuje WS (SOAP a WDSL) o transakční
kontext v hlavičce SOAP a definuje protokol pro
transakční interoperabilitu mezi WS
Zahrnuje tři specifikace
7
WS-Coordination
▪ Koordinátor podporující různé protokoly (WS-AT, WS-BA)
▪ Definuje jak WS spolupracuje se koordinátorem
WS-AtomicTransactions – 2PC protokol
WS-BusinessActivity – definuje open nested
transakční protokol s kompenzujícími akcemi
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
40
1
2
3
4
5
6
7
Komponenty DTP modelu dle X/Open
Aplikační program – definuje hranice a akce transakce
Manažer zdrojů – poskytuje přístup ke sdíleným zdrojům (např. k DB systému)
Transakční manažer – řízení potvrzení/zrušení transakce v DP
X/Open definuje rozhraní pro komunikaci mezi moduly
Manažer zdrojů 1
Aplikační program
tx_open, tx_ close
tx_begin, tx_commit,
tx_rollback
4/20/2015
Manažer zdrojů 2
Transakční manažer
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
xa_open, xa_ close
xa_start, xa_end,
xa_prepare, xa_commit,
xa_rollback
xa_recover, xa_forget
41
1
2
3
4
5
6
7
Služba z CORBA specifikace, zahrnuto v Java EE pro
propagaci transakčního kontextu
Možnost používat různé CORBA objekty v transakcích
Transakční klient/server a recoverable server
představují aplikaci, transakční služby implementují
transakčního manažera
Komunikace přes ORB
Podporuje implicitní i explicitní model programování
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
42
1
2
3
4
5
Definuje rozhraní v Javě pro TX a XA protokoly
Použito v JCA, JDBC a JMS
Skládá se ze tří hlavních částí
6
7
Rozhraní umžňující aplikaci explicitně začít,
propagovat a ukončit transakci
Java language mapping of the XA interface
Rozhraní mezi transakčním manažerem a dalšími
komponentami aplikačního serveru
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
43
1
2
3
4
5
Moderní prostředí pro vývoj a nasazení TP aplikací
Vícevrstvé TP aplikace
6
7
Kient -> Databáze
Klient -> Request Controller -> Databáze
Klient -> Request Controller -> Transakční Server ->
Databáze
Explicitní vs. deklarativní model programování
transakcí
Databáze „dohánějí“ fce transakčního middleware
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
44
1
2
3
4
5
6
7
Front-end: Swing Library, Servlets, Java Server Pages
a Java Server Faces
Request controllers a transakční servery: Enterprise
Java Beans (EJBs)
Transakční manažer: specifikace implementace v JTS,
přístupný přes rozhraní Java Transaction API (JTA)
Integrace s jinými systémy: The Java Connector
Architecture (JCA) API
Business procesy: WS-BPEL engine
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
45
1
2
3
4
5
6
7
Front-end: Windows Presentation Foundation (WPF), ASP.NET,
Silverlight
Request controllers a transakční servery: Windows Communication
Foundation (WCF) a Internet Information Server (IIS)
Transakční manažer: Microsoft Distributed Transaction
Coordinator (DTC) a Lightweight Transaction Manager (LTM)
Integrace s jinými systémy: Host Integration Server (HIS) and
BizTalk Server
Business procesy: Windows Workflow Foundation (WF) a WS-BPEL
podpora v BizTalk Server
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
46
1
3
4
5
6
7
Transaction Processing Performance Council (TPC)
2
Sdružení firem vytvářející univerzální benchmarky
Základní jednotka – transakce za sekundu (tps)
Cena/výkon = (cena HW + SW + 5let údržby) / tps
http://www.tpc.org/
Aktuální benchmarky
TPC-C – OLTP test, dávkové a interaktivní transakce
TPC-E – nová verze OLTP workload (robustní systémy)
TPC-H – business-oriented ad-hoc dotazy a konkurentní
datové modifikace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
47
1
3
4
5
6
7
Služby s vlivem na programování aplikací
2
Řízení heterogenity (uzavření operací do transakce)
Řízení komunikace (TRPC)
Řízení terminálů (komunikace a zprávy též v transakci)
Prezentační služby – restart prostředí
Řízení kontextu – udržování kontextu
Start/restart – uvedení do konzistentního stavu
Další služby
4/20/2015
Řízení konfigurací
Autorizace
Administrace
Vyvažování zátěže
…
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
48
1
2
3
4
5
6
7
TP monitor musí řídit systémové zdroje
Podobné jako v OS, který by se mohl rozšířit o TP
Pro každý terminál musí existovat proces,
který zpracovává jeho požadavky
Je potřeba pochopit aspekty mapování
požadavků na vybrané procesy
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
49
1
Vyvolání
služby
N
1
Server
(1 proces)
N
1
N
N
1
1
N
Požadavek
obsahuje
TAC/TPN
4/20/2015
3
4
5
6
7
Server class
1
1
Služba
2
1
Aplikační
program
N
Jak mapovat požadavky na proces?
1
Aplikace
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
50
1
Jeden proces na terminál
Mnoho serverů, jeden plánovač
2
3
4
5
6
7
Jediný serverový proces
… a více plánovačů
Která architektura odpovídá datovému modelu z předchozího slajdu?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
51
1
2
3
4
Použitelné jen pro malý počet klientů (10-100)
10.000 klientů = 10.000 procesů - nepoužitelné
5
6
7
Co když většina procesů nic nedělá
Nákladné přepínání kontextu
Ne každý klient potřebuje všechny fce
Příliš mnoho řídících struktur (každý proces vlastní)
Málo flexibilní vyvažování zátěže – priority procesů
řídí OS
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
52
1
2
3
4
5
6
TP monitor má vše v rukou – priority řídí sám
Ale…
7
Musí podporovat všechny protokoly
Omezení jedním adresovým prostorem
Pád procesu = pád všech spojení
Jeden proces je úzké hrdlo (multiprocesory)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
53
1
2
3
4
5
6
7
Každý terminál je obsluhován jedním vláknem
Problém s ochranou paměti
Vlákna pomocí Middleware
Implementace na míru (rychlost)
Mnoho funkcí je potřeba volat přes API, např. musí
kontrolovat I/O operace (proces nesmí usnout)
Vícevláknové OS
Přepínání mezi vlákny = volání systémových funkcí
Může využívat SMP nebo multicore procesory
V dnešní době převažuje v TP produktech
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
54
1
3
4
5
6
7
Plánovač – řídí příjem a distribuci požadavků
2
Speciálně vyčleněný proces – prezentační vrstva
Řeší autentikaci klientů
Identifikace požadavků
Distribuce jednotlivým aplikačním procesům
Úzké hrdlo pro případ velkého množství požadavků
Aplikační proces
Aplikace jich může mít více
Komunikuje jen s příslušnými zdroji
Chráněny vůči sobě navzájem (vlastní adresový prostor)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
55
1
2
3
4
5
6
Zobecnění předchozí architektury
Více funkčně shodných procesů
Přijímají a dále distribuují požadavky klientů
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
56
1
2
3
4
5
6
7
Vstupní fronta
TP monitor bere každý podsystém
jako resource manažera, který
poskytuje transakční přístup
k poskytovaným zdrojům
Často požadavek na perzistenci
front (hlavně výstupních), tj. po
pádu systému je možné zpětně
nabídnout výsledky potvrzených
transakcí klientovi
Autorizace
Lock manažer
Aplikační
servery
Recovery manažer
Log manažer
DB a RM
Výstupní fronta
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
57
1
2
3
4
5
6
7
Prezentační služby
Rozhraní odstiňující programátora od technických detailů
Správa front
Příjem požadavku a zařazení do správné fronty
Doručení výsledku na klienta (at least/most/exactly once)
Požadavky jsou ve frontě pouze tehdy, pokud klient
potvrdí
Správa serverových tříd/procesů
Vytvoření procesu a jeho spravování (práva, priority,
přepínání kontextu)
Vytvoření front
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
58
1
2
3
4
5
6
7
Plánování a časování požadavků
Přeposílání požadavků na místo určení
Vyvažování zátěže
Autorizace požadavků
Statická vs. Dynamická (value-dependent) autorizace
Řízení kontextu
Průběžné ukládání dat, kterých se transakce týká
Rozesílání výsledků mezi servery
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
59
1
2
3
4
5
6
7
Potřeba rozsáhlé repository
Seznamy všech uzlů, SW a HW komponent
Uživatelé, role, profily, konfigurace
Rozhraní pro TP monitor
4/20/2015
Nastartování a restart
Definice nového resource managera
Změna konfigurace serverového procesu
Zpracování TRPC požadavků
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
60
1
2
3
4
5
6
7
Vzdálené volání procedur (Remote Procedure Call)
RPC protokol umožňuje komunikaci procesů na dálku
Volání vzdálené procedury se programátorovi navenek jeví jako lokální volání
Stub procedury zajišťují marshalling/unmarshalling parametrů
Potřeba jednotného IDL (Interface definition language), binding (jméno + port)
Klient
4/20/2015
Lokální
volání
funkce
Stub
procedura
klient
Vrácení
výsledku
Stub
procedura
klient
Síťové
služby
Server
Stub
procedura
server
Volání
skutečné
funkce
Stub
procedura
server
Vrácení
výsledku
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
61
1
2
3
4
5
6
7
Mnohem komplikovanější než RPC
Používají se resource mangery (RM), ty mohou
používat další TRPC …
Všechny začleněné RM se stávají součástí transakce
Každé TRPC volání musí mít ID, musí být evidováno ve
všech TRPC, které spustí
Vzniklé procesy, zprávy musí mít ID TRPC
Navíc musí vše proběhnout jako jedna transakce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
62
1
3
4
5
6
7
Řízení účastníků
2
Seznam resource manažerů (RM) na transakci
Před konečným potvrzením musí všichni potvrdit
Zařizuje transakční manažer (2PC)
Jednodušší RM nemusí potvrzovat potvrzení
Chránění informací o transakcích
RM může být volaný několikrát jednou transakcí
Každé volání může být zpracováno jiným procesem
Každé volání může být iniciováno jiným procesem
Podpora transakčních protokolů
ACID na všech RM pomocí TRPC
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
63
1
2
3
4
5
6
7
Jsou různé typy resource manažerů dle
podporovaného rozhraní pro transakce
Rozhraní jsou definované i pro komunikaci
mezi resource manažery
A také pro administraci manažerů monitorem
Resource manažer nesmí být volán přímo, ale
přes prostředníka – tp monitor
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
64
1
2
3
4
5
6
7
Proč udržovat kontext na RM?
Několik operací jedné transakce na jednom RM
Operace zpracována/vyvolána různými
procesy/klienty
Scénáře komunikace
Nezávislá volání – operace volány nezávisle na sobě
Sekvence volání – „dalších 10“ – je nutné znát
výsledek předchozí operace + její kontext
Komplexní interakce – výsledky operací se musí
uchovat až do celkového potvrzení – tj. výsledek se na
závěr složí z průběžně volaných operací
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
65
1
2
3
4
5
Používat sessions nebo volání služeb?
Pokud spolu mají delší dobu komunikovat, tak sessions
Jak tedy udržovat kontext?
6
7
Pomocí komunikačního systému
Posílání kontextu v těle zpráv
Uložení kontextu mimo server v DB
Uložení kontextu ve sdílené paměti
Typy kontextu
Client-oriented (běžné komunikační systémy)
Transaction-oriented (resource manažer)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
66
1
2
3
4
5
6
7
Proč nepoužívat přímé ale frontované transakce
Load control – chvilkové přetížení se zbytečně neřeší
novým procesem
End-user control – čekání na převzetí výsledků
uživatelem nezastaví celý proces
Recoverable data entry – nezahlcuje se server, není
prioritou doba odezvy, ale průchodnost systému
Multi-transaction request – u řetězce serverů mohou
fronty zvýšit průchodnost celého systému
Dva typy front – volatile a durable
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
67
1
2
3
4
5
6
Slouží k implementaci přímého volání transakcí
Pokud je více požadavků než procesů, dojde k
7
Zamítnutí požadavku
Vytvoření nového procesu
Vložení do fronty (uživateli skryto)
Organizace fronty většinou FIFO
Přístup ke frontě musí být chráněn
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
68
1
2
Slouží pro asynchronní transakční zpracování
Klient po předání požadavku může potvrdit
Každá žádost = tři transakce
3
4
5
6
7
Klientská žádost
Výpočet na serveru
Zpracování výsledku klientem
Manažer zdrojů může mít více front
Typy front – ASAP, timed (zpracování po čase),
threshold (zpracování až pro určitý počet požadavků)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
69
1
2
3
4
5
6
7
Zpracování prvků v FIFO frontě v případě abortu
Odebrání prvku je součástí transakce, tj., abort = vrácení
„nejstaršího“ prvku do fronty
T1 dělá na nejstarším prvku, na kterém prvku má dělat T2?
▪ Sériové zpracování – T2 čeká na výsledek, není moc efektivní
▪ Transakce T2 hledá nejstarší prvek, na kterém nedělá jiná transakce
▪ Pokud je požadováno striktní FIFO zpracování a T1 je zrušena, tak
musí být zrušena i T2
Jak se zbavit neproveditelného požadavku
Použití čítače neúspěšných pokusů, po určitém počtu abortů
prvek z fronty vyhodit (abort ale nemůže dělat update)
Update fronty buď jako nechráněná akce, nebo maskovat
abort za úspěšnou transakci, která změní čítač a potvrdí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
70
1
Rozvržení zátěže za účelem optimalizace
dynamické části systému
Kde dává smysl rozkládat zátěž?
Problémy s rozkládáním zátěže
2
3
4
5
6
7
Interdependence of local loads – užírání ze stejného koláče
Data affinity – přenos dat může zásadně zpomalit výpočet
Context transfer – rozložení výpočtu = kontext navíc
Decision overhead – náklady na rozkládání < zisk
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
71
1
Rozdíly?
Problémy s implementací
2
3
4
5
6
7
Kdy autentikovat, kdy autorizovat
Na jaké granularitě objektů řešit autorizaci
Jak delegovat autoritu mezi procesy
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
72
1
2
3
4
Rozšíření/úprava flat ACID modelu
Rozšíření != vylepšení – vždy „trade-off“
Použití silně závisí na druhu aplikace
5
6
7
Vícekrokové objednávky
Dávkové vkládání
Modelování součástek v CAD systémech
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
74
1
2
3
4
5
6
Chráněné akce – ACID transakce, výsledky
jsou vidět až po úspěšném skončení akce
Nechráněné akce – jediné co zaručují je
konzistence, většinou se obalují transakcemi
Skutečné reálné akce – akce s reálným
efektem, není možné provést UNDO, proto
se jejich provedení přesouvá až těsně před
potvrzení transakce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
75
1
2
3
4
5
6
7
Chráněné akce – stavební bloky pro spolehlivé
distribuované aplikace
Nechráněné akce – musí být přímo kontrolované
aplikací nebo obalené chráněnou akcí. Pokud to
nelze zajistit, nesmí být na jejich výstupu nic
závislé
Skutečné reálné akce – vyžadují speciální
zacházení – systém je musí rozeznat a musí
zajistit, že jsou spuštěny až ve chvíli, kdy
všechny ostatní chráněné akce úspěšně potvrdily
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
76
1
2
3
4
5
6
7
Vhodný pro krátké jednoduché operace, její účinky jsou patrné až po
potvrzení/zrušení, tj. ani zprávy o chybách nejsou odeslány před ukončením
Stavový diagram je jednoduchý (až moc…)
NULL
Begin work
aktivní
Commit
work
Terminate
Rollback
work
Terminate
potvrzená
zrušená
Na první pohled je zřejmé, že chybí …
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
77
1
2
3
4
5
6
7
Přístup „vše nebo nic“ má též chránit systém proti (skrytým) chybám,
kterých se programátor dopouští (opak defenzivního programování)
Výhodou modelu je relativně snadná implementace, nevýhodou modelu
je jeho přílišná jednoduchost – viz příklady:
BookFlight(Prague, Toronto)
Update(Price)
RentCar(Toronto,Niagara)
If Price + CarRent < Limit
Update(Price) and Commit
Else
Undo RentCar(Toronto,Niagara)
BuyBusTicket(Toronto, Niagara)
Commit
Nechceme dělat undo ručně,
rollback ale vezme s sebou vše
4/20/2015
Account A;
For i=1 to 100.000
{
A.Id = I;
A.Date = Now;
A.Debit = 0;
A.StoreInDB();
}
Abort po i=97.998 znamená ztrátu
veškeré práce, ač jsou nové účty OK
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
78
1
Příliš velký rozsah – VŠE nebo NIC
Neuvažuje vůbec vnitřní strukturu
Netoleruje dílčí neúspěchy
Transakce nespolupracují, nic nesdílí
Neřeší přirozený problém vnořování
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
2
3
4
5
6
7
79
1
2
3
4
5
6
7
Pozorování – řízení výpočtů v distribuovaném
víceuživatelském prostředí vyžaduje
Uchování efektů operací (možnost vrátit se zpět)
Monitorování všech závislostí (kde se stala chyba)
Model „spheres of control“ (SoC)
První pokus o formalizaci problematiky transakcí (Bjork,
Davies 1972 - 1973)
Teorie, která popisuje a pojmenovává možné problémy
(zajištění hlavně zotavení systému)
Předběhl svou dobu, jednoduchost flat modelu byla
zkrátka rozhodující… nicméně, SoC stále inspiruje
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
80
1
2
3
4
Přístup k prostředkům vždy v rámci SoC
SoC drží historii všech operací, dokud je třeba
SoC uchovává i všechny závislosti mezi operacemi – tj. co vše
zasáhne případné undo
5
6
7
Strukturální závislosti
▪ SoC implementováno jako hierarchie abstraktních datových typů
▪ Výsledky vrácené přes rozhraní ADT = potvrzená lokálně korektní data
Dynamické závislosti kvůli konzistenci mezi více ADT
▪ Info pro potvrzení dat (např. převod mezi účty), sdílení/externalizace dat
▪ Potvrzení dat může být mimo proces, který je vytvořil
Systém musí uchovávat v podstatě kompletní historii všech
operací, aplikace se musí postarat o zbytek
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
81
1
2
3
4
5
6
7
Globální proměnná
Strukturální SoC
Dynamická SoC
Co všechno musí být uchováno v logu?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
82
1
2
3
4
5
6
Nikdy nebylo pořádně formalizováno
Závislosti v podstatě jakékoliv (vznikají i zpětně
při opravě chyb v systému) – velká složitost
V původním podobě velmi těžké na
implementaci, bylo popsáno CO udělat,
ale ne JAK toho dosáhnout
Důsledek – v praxi se uchytily jednoduché
modely vycházející z (rozšíření) flat modelu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
83
1
2
3
4
5
6
7
Notace z Graye
Grafická notace
Pravidla
ACTA (Chrysanthis, Ramamrithan 199x)
4/20/2015
Historie objektů
Transakční závislosti
Konfliktní relace mezi operacemi
Delegace objektů mezi transakcemi
Jaká data jsou vidět zvenku, kontrola kolizí
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
84
1
2
3
4
5
6
7
Složitější modely vychází ze základních ACID bloků
Abort
Begin Commit
Rozhraní pro vstupní signály,
které způsobují změnu stavu
Identifikátor akce
Aborted
4/20/2015
Committed
Identifikátor stavu po
provedení akce
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
85
1
2
3
Formální popis transakčních modelů (předchůdce ACTA)
Levá strana <rule identifier>:<preconditions>
Pravá strana <rule modifier list>, <signal list>, <state transition>
kde rule modifier list = +(<rule identifier | signal>) nebo delete(X)
4
5
6
Příklad – při spuštění transakce T se přidá pravidlo „Při abortu systému
zaslat abort signál T“ a pak změnit stav na aktivní
SB(T):
+(SA(system) | SA(T)), , Begin work
Tabulková notace (pro přehlednost, použito jen v této ppt)
Rule Id
SB(T)
4/20/2015
Prec.
Rule modifiers
+(SA(system) | SA(T))
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
Signals
7
State tran.
Begin work
86
1
Rule Id
Prec.
Rule modifiers
Signals
2
3
4
5
+(SA(system) | SA(T))
Begin work
SA(T)
delete(SC(T)), delete(SB(T))
Rollback work
SC(T)
delete(SA(T)), delete(SB(T))
Commit work
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
State tran.
SB(T)
4/20/2015
6
87
1
Anglický název
4/20/2015
Pokus o překlad
2
4
5
6
7
Zkratka
Flat model
FM
Spheres of control
SoC
Transaction with savepoints
Transakce se savepointy
SP
Chained transactions
Zřetězené transakce
ZT
Nested transactions
Hnízděné transakce
HT
Distributed transactions
Distribuované transakce
DT
Multi-level transactions
Víceúrovňové transakce
VT
Open nested transactions
HT bez omezení
ONT
Long-lived transactions
Dlouho trvající transakce
DTT
Exotics
Exotické modely
EM
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
3
88
1
2
3
4
5
6
7
Motivace – rollback NEPROVÁDĚT až na začátek
Zavádějí se místa, tzv. savepointy
První SP většinou po startu transakce
Flexibilní rollback – o kolik kroků zpět?
Dopředný rollback
Rollback k rollbacknutým stavům
Rollbacky se pak stávají součástí historie
Neřeší problém s tvrdým výpadkem systému
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
89
1
2
3
4
5
6
7
Nechť R je SP ke kterému chceme provést rollback
Delete pravidla jsou vynechána (jsou stejné jako u flat modelu)
Rule Id
Prec.
SB(S1)
Rule modifiers
Signals
State tran.
+(SA(system) | SA(S1))
Begin work
delete(SC(S1)), delete(SB(S1))
Rollback work
SC(S1)
delete(SA(S1)), delete(SB(S1))
Commit work
SS(S1)
+(SA(S1) | SA(S2))
SA(S1)
R<S1
SB(S2)
…
SB(Sn)
SA(Sn)
Begin work
…
SA(Sn-1)
Rollback work
SC(Sn)
…
SC(Sn-1)
Commit work
SS(Sn)
+(SA(Sn) | SA(Sn + 1))
SB(Sn+1)
4/20/2015
R<Sn
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
90
1
2
3
4
5
6
7
Spuštění transakce
a vytvoření prvního SP1
Postupně se vytváří SP2 a SP3
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
91
1
Systémový abort = abort všech SP
Perzistentní SP = Phoenix transakce
Problém po restartu u perzistentních SP
2
3
4
5
6
7
Stav DB je nastaven na stav uložený v SP
Kód provádějící transakci ale nemusí mít stejný stav
SP1 jediný nekonfliktní
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
92
1
2
3
4
5
6
7
Programátor se po části výpočtu vzdá možnosti
rollbacku nad touto částí, tj. potvrdí část transakce
Nechce ale ztratit kontext, kurzory, atp.
Tj. je potřeba zavést atomickou operaci Chain work
= Commit + Begin
Transakce může uvolnit zdroje (např. zámky)
Rule Id
Prec.
Rule modifiers
Signals
State tran.
SB(Cn)
+(SA(system) | SA(Cn))
Begin work
SA(Cn)
delete(SC(Cn)), delete(SB(Cn))
Rollback work
SC(Cn)
delete(SA(Cn)), delete(SB(Cn))
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
SB(Cn+1)
Commit work
93
1
2
3
4
5
6
7
Spuštěna C1, start C2 je
podmíněn potvrzením C1
C1 potvrdí což vyvolá
start C2 která je nyní
strukturálně závislá na
systémové transakci
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
94
1
2
3
4
5
6
7
Workflow
Oba modely umožňují zachování pomocných struktur
(např. kurzory)
Commit vs. SP
U SP modelu lze provést rollback ke kterémukoliv
vytvořenému SP (flexibilita)
Commit naopak umožní uvolnit zdroje (např. zámky)
Restart
ZT model – odolný vůči systémovému abortu
Problém s rekonstrukcí stavu u SP i ZT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
95
1
2
3
4
5
6
7
K nedokončené transakci se vytvoří po restartu ‘, která dokončí
práci za a pak pokračuje na . Kde ale vzít vstup pro ‘?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
96
1
Zobecnění SP modelu
Počítá s hierarchicky strukturovanými úlohami
Definice hnízděných transakcí (HT)
2
3
4
5
6
7
HT je nevyvážený strom transakcí, podstromem jsou buď jiné
4/20/2015
HT transakce nebo flat transakce
V listech jsou pouze flat transakce
Kořen stromu se nazývá top-level transakce, ostatní uzly se
nazývají podtransakce, rodič a potomek definované klasicky
Potomek potvrdí až poté, co potvrdí kořenová transakce
Rollback transakce vede k rollbacku všech jejich potomků
(podtransakce mají pouze ACI vlastnosti a ne D)
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
97
1
2
3
4
5
6
7
Commit pravidlo – po potvrzení podtransakce jsou výsledky
dostupné jen v rodičovské transakci, podtransakce skutečně
potvrdí až s potvrzením kořenové transakce
Rollback pravidlo – pokud je podtransakce zrušena, bere sebou
všechny své potomky (i když už lokálně potvrdili), když je zrušena
kořenová transakce …
Změny provedené podtransakcí jsou po lokálním potvrzení
viditelné jen rodičovské transakci, objekty držené rodičovskou
transakcí jsou přístupné potomkům, potomci jsou izolovaní v
případě souběžného spuštění
Rodič rozhoduje o řešení zrušení potomka (restartovat, zvolit
alternativní výpočet, abortovat)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
98
1
2
3
4
5
Atomicita – podtransakce jsou atomické jen z
rodičovské perspektivy
Konzistence – podtransakce jsou konzistentní
pouze vzhledem k lokální fci kterou
implementují
Izolace – stejně silná jako u flat modelu
Trvanlivost – neplatí kvůli Commit pravidlu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
6
7
99
1
System
System
2
3
4
5
6
7
System
Zde se potvrzení nepropaguje, ale je
podmíněné ukončením podtransakcí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
100
1
2
3
4
5
6
7
Uvažujme podtransakci Tkn s rodičem Tk
Chování je pak popsáno pravidly
Rule Id
Prec.
Rule modifiers
Signals
State tran.
SB(Tkn)
+(SA(Tk) | SA(Tkn))
Begin work
SA(Tkn)
delete(SC(Tkn)), delete(SB(Tkn))
Rollback work
delete(SA(Tkn)), delete(SB(Tkn))
Commit work
SC(Tkn)
C(Tk)
Jednoduchost modelu je způsobena jinými
restrikcemi kladenými na podtransakce
Částečné vs. finální potvrzení
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
101
1
2
3
4
5
6
7
Vytvoření SP pro každý uzel hierarchie, možnost
vracet se k hotovým SP
Problém s paralelním spuštěním podtransakcí –
ty nelze emulovat – SP se řadí lineárně za sebou,
rollback „jen přes některé“ není možný
Problém se zámky – u HT rozhoduje o přidělení
zámků rodič, ty se vrací po potvrzení
podtransakce, u SP patří všechno všem
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
102
1
2
3
4
5
6
7
Typicky běží jako flat transakce, která musí
navštívit více uzlů v síti – „jde“ si pro data formou
spuštění podtransakce na jiném uzlu
HT vs. DT transakce
HT struktura je určena fční dekompozicí aplikace
DT struktura je dána distribucí dat v síti
Podtransakce nejsou potomci, ale spíše kopie
rodiče na menších datech
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
103
1
2
3
4
5
6
7
System
Uzel 1
Uzel 2
4/20/2015
Uzel 3
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
104
1
2
3
4
5
6
7
Zobecnění HT transakcí
povolují pre-commit (uvolní zámky, zpřístupní výsledky)
zavádí kompenzující transakce (pro případ abortu)
Abort rodičovské transakce způsobuje vyvolání kompenzující
transakce u těch potomků, kteří již potvrdili
Kompenzující transakce musí vždy potvrdit (zrušení KT by
znamenalo, že se nepovedlo celkové zrušení)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
105
1
2
3
4
5
6
7
„Anarchistická“ verze víceúrovňových transakcí
Potomci mohou být potvrzeni/zrušeni nezávisle na
rodičích
Rodič-potomek nemusí být dány sémantikou
Jedná se o nechráněné akce
Slouží spíš jako start více top level trans.
Nepoužívají sféru vlivu na celek
Použití v klient-server prostředí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
106
1
2
3
4
5
6
7
Nejedná se přímo o model, ale spíše o koncept
Transakce trvají velmi dlouho
Rychlá rekonstrukce kontextu není možná
Speciální případ - transakce s otevřeným koncem
Mohou být pouze zrušeny (není definováno potvrzení)
Nekonečné nebo stále běžící výpočty
Běh operačního systému, senzory, traffic monitoring, …
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
107
1
2
3
4
5
6
7
Ale zpátky k problému s účty a úroky …
Account A;
For i=1 to 100.000
{
A.Id = I;
A.Date = Now;
A.Debit = 0;
A.StoreInDB();
}
Abort po i=97.998 znamená ztrátu veškeré práce, ač
jsou nové účty OK
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
108
1
3
4
5
6
7
Jak se s ním vypořádávají již uvedené modely?
2
Flat (ACID) – ztráta veškeré práce
HT a SP jsou také ACID - opět vše nebo nic
VT – sice povoleno potvrzení, ale zase ACID – kompenzace
ZT – neztratí se práce, ALE problém s rekonstrukcí výpočtu, změny se
navíc projevují postupně
Požadavky na dlouhotrvající transakce
Výpočty strukturované z více sekvenčně řazených operací
Automatické udržování informací o kontextu výpočtu
Problém – program může pro stejný vstup dát jiný výstup, tj.
závisí i na kontextu, který je třeba získat
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
109
1
2
3
4
Řešením jsou různé formy logů, problém je neexistující podpora v
běžných programovacích jazycích – důsledek – musí se řešit zvlášť
Jak tedy vyřešit problém s kontextem?
6
7
Kontext jako „skrytý“ vstup!
Striktně vymezit kontext výpočtu
Průběžně kontext ukládat
Vstup
5
?
Transakce
Výstup
Typy kontextu
Žádný kontext – triviální, není co řešit (context-free programy)
Lokální kontext – kontext se váže pouze na volající program (kurzory, …)
Globální kontext – všechny globální proměnné, obsah celé DB, …
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
110
1
2
3
4
5
6
7
Pokusy o řešení (neřeší ale kompletně ACID ...)
Mini-Batch – zpracování po dávkách s vlastním ukládáním
kontextu
Ságy – systémový přístup, podporují i rollback
Stále ale zůstává problém s viditelností výsledku
Kdo může být vlastníkem kontextu
Transakce, program, koncové zařízení, uživatel, …
Zotavitelnost kontextu
Ukazatel na konec souboru vs. čítač v programu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
111
1
2
3
4
5
6
Vhodné pro sadu sekvenčně řazených operací,
které lze rozdělit do dávek
Kontext výpočtu se průběžně ukládá do DB
7
Použije se nová tabulka pro uložení kontextu
Kontext = číslo poslední potvrzené operace
Neatomický - garantuje pouze provedení všeho
Izolovanost platí pouze pro prováděnou dávku
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
112
1
2
3
4
5
6
Snaha o systémové řešení
Opět řetězce transakcí, ale obohacené o princip
kompenzačních transakcí
Ke každé transakci Si existuje kompenzační
transakce CSi (může i např. připočítat penále)
Možné výstupy
7
Comit vede na posloupnost S1, .., Sn
Abort vede na posloupnost S1, .., Sj, CSj-1, .., CS1
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
113
1
2
3
4
5
6
7
Jak by vypadala základní pravidla pro ságy?
Rule Id
Prec.
SB(S1)
???
4/20/2015
Rule modifiers
Signals
+(SA(system) | SA(S1)), delete(SB(S1))
???
???
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
State tran.
Begin work
???
???
114
1
2
3
4
5
6
7
Exotická (z hlediska výskytu) je v podstatě většina
doposud uvedených modelů
Tyto modely se alespoň snažily zachovat ACID, daly se
popisovat jednoduše pravidly
Exotikou jsou myšleny takové modely, na které
principy ACID pohledu nestačí
4/20/2015
Kooperující transakce
Split transakce
Joint transakce
RCA
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
115
1
2
3
4
5
6
7
Vychází z potřeb CAD systémů, kde na jedné součástce dělá
tým lidí
Některé charakteristiky nehotové součástky je potřeba sdílet
s ostatními členy týmu
Zapůjčení objektu,
ten je jen pro čtení
Navrácení objektu
na vyžádání
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
116
1
3
4
5
6
7
Rozdělení původní transakce Ta na dvě Ta a Tb
2
Podělí se o dosud provedené operace
Starají se pak o potvrzení/zrušení
Pro nekonfliktní operace povoleno sdílení dat
Sériový nebo nezávislý split
Možno štěpit dále – strom transakcí
Příklady použití
Externalizace výsledků splitem – musí se hlídat abort
Sdílení zamknutých dat mezi transakcemi
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
117
1
2
3
4
5
6
7
Konec transakce může být i splynutí s jinou
Odevzdá pak všechny zámky, objekty, logy
Externalizace efektů až s potvrzením spojené transakce
Zajímavý model vzniká kombinací Split a Joint
transakcí
Výpočet se rozdělí na část ACID a na část kdy platí
„volnější“ pravidla transakčního zpracování
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
118
1
2
3
4
5
6
Snaha o aplikaci zotavitelnosti pro komunikační
systémy
Je potřeba monitorovat abort-závislosti
Skupina závislých transakcí tvoří transakci vyššího
řádu
Na takové transakci je pak umožněn částečný
rollback
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
119
1
3
4
5
6
7
Rozšíření flat ACID modelu pro konkrétní úlohy
2
Snaha o zachování korektně provedené práce
Podpora flexibilnějšího sdílené prostředků
Externalizace hotové práce
Ale stále jde o systémové zachování izolovanosti…
Některé modely jsou již podporované v běžných DB serverech
MS SQL server 2008 a Oracle podporují Savepointy
Pravidla a grafické znázornění modelů
Jaká jsou pravidla pro distribuované transakce?
Dále se budeme zabývat obecnými pravidly systémů, ve kterých
transakce běží – TP monitory
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
120
1
2
3
4
5
6
7
Požadavky reálných aplikací
Rychlá doba odezvy, propustnost
Práce nad sdílenými daty
Konkurentní výpočty, paralelismus
Problémy
Konkurentní výpočet může vést k porušení invariantů systému
Jak poznat, co vše je ovlivněno konkurentními transakcemi?
Invariant
Predikát odolný (platný) vzhledem k prováděné transformaci
Všechny invarianty splněny = systém je v konzistentním stavu
Příklad – Array.Length() = Array.Add(0).Remove(o).Length()
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
122
1
2
3
4
5
6
7
Konzistence dat v DB se dá popsat invarianty a je hlídána
Samotným datovým modelem/schématem
Omezeními (constraints) pomocí triggerů
Vlastnostmi ACID u transakcí
Příklad s účty U1, U2, U3
Nechť U1.zůstatek = U2.zůstatek = U3.zůstatek = 1000
Celková suma v systému je 3000
Typická transakce – převod peněz mezi účty
Invariant – jakékoliv transfery peněz mezi účty nesmí změnit celkovou
sumu peněz v systému
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
123
1
2
3
4
5
6
7
Základní operace v transakci obsahující příkazy SELECT a UPDATE
READ(X, @x) – načtení objektu X z DB do lokální proměnné @x
WRITE(X, @x) – zapsání do objektu X v DB (pozor na cache!) z lokální proměnné @x
COMMIT – potvrzení změn a ukončení transakce
ABORT (ROLLBACK) – stornování změn a ukončení transakce
Transakci lze chápat jako DB program
Operace s DB (Read / Write) + další operace (aritmetické, pomocné, atp…)
Porušení izolace - R/W operace nad stejnými daty - na ty se budeme zaměřovat
Transakce - posloupnost R/W operací zakončená COMMIT nebo ABORT
Pro přehlednost můžeme v zápisu vynechávat lokální proměnné @zU, …
Např.
Úhrada(částka, zU, naU) = { Read(zU), Write(zU), Write(naU) , COMMIT}
Operace transakce se také často zapisují pro přehlednost do sloupce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
124
1
2
3
4
5
6
7
Úhrada(@částka, @zÚčtu, @naÚčet)
SELECT @z1=zůstatek FROM Účet WHERE čÚčtu = @zÚčtu
// Read(zU)
SELECT @z2=zůstatek FROM Účet WHERE čÚčtu = @naÚčet
UPDATE Účet SET zůstatek = @z1 – @částka WHERE @čÚčtu = @zÚčtu
UPDATE Účet SET zůstatek = @z2 + @částka WHERE @čÚčtu = @naÚčet
// If (@z1 < částka) ZrušTransakci(„Nedostatek peněz na účtu!“)
// Read(naU)
// Write(zU)
// Write(naU)
Potvrdit transakci
Nebudeme pro
začátek uvažovat
// U1.zůstatek = U2 .zůstatek = U3 .zůstatek = 1000, suma = 3000
T1:Exec Úhrada(100, ‘U1’, ‘U2’);
// U1 .zůstatek = 900, U2 .zůstatek = 1100, U3 .zůstatek = 1000, suma = 3000
T2:Exec Úhrada(100, ‘U2’, ‘U3’);
// U1 .zůstatek = 900, U2 .zůstatek = 1000, U3 .zůstatek = 1100, suma = 3000
T3:Exec Úhrada(100, ‘U3’, ‘U1’);
// U1 .zůstatek = U2 .zůstatek = U3 .zůstatek = 1000, suma = 3000
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
125
1
2
3
4
5
6
7
Uvažujme prostředí ve kterém může být současně spuštěno více
transakcí (zatím - každá končí příkazem COMMIT a bereme statické DB)
Sériové vykonávání
Dokud není obsloužena aktuálně zpracovávaná transakce, ostatní čekají
Nemusí se řešit konflikty u společných DB objektů - konzistence
Během R/W operací je procesor nevytížen
Paralelní vykonávání
všechny transakce jsou průběžně obsluhovány (tj. jedna čte data z DB, druhá
může provádět výpočty nad již dotaženými daty)
Jedna velká „neodstřelí“ server - odezva
Musí se řešit konflikty nad společnými DB objekty (Izolace)
Požadované chování SŘBD – paralelní vykonávání transakcí, kdy výsledný
stav DB je stejný jako při sériovém vykonávání
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
126
1
2
3
4
5
6
7
Rozvrh je posloupnost operací které vykonávají průběžně běžící
transakce, operace jsou libovolně prokládány
S = {T1.Read(X), T1.Write(Y), T2.Read(Y), T2.Read(X), T1.Read(Z), …}
Nelze naplánovat/vytvořit dopředu (rozvrhovač neví, které
transakce dorazí ke zpracování, dokonce ani nezná dopředu
jednotlivé kroky vykonávaných transakcí)
Tzn. rozvrh není vytvořen rozvrhovačem předem, rozvrh je jen
historie provedených operací
Rozvrhovač může jen garantovat vlastnosti rozvrhu pomocí
omezení, které klade na spouštěné transakce (např. pustí transakci
jakmile má potřebné zámky)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
127
1
2
3
4
5
6
7
Pokud by rozvrhovač pouštěl transakce ke slovu úplně náhodně,
tak by mohl vzniknout pro T4, T5, T6 např. následující rozvrh.
Nicméně, paralelní provedení zde nevede ke konzistentnímu stavu DB.
T4
T5
T6
Read(A, @a1)
Read(A, @a2)
@a 1= @a1 + 10
@a2 =@a2 + 5
Write(A, @a1)
Read(B, @b3)
@b3 = @b3 * 2
Write(A, @a2)
Read(C, @c2)
Write(B, @c2)
U libovolného sériového
rozvrhu pro T4, T5, T6
bude k A přičteno celkem
15. Po vykonání tohoto
rozvrhu bude hodnota
A větší pouze o 5. Problém
je v R/W konfliktech nad
společnými daty. Možné
konfliktní dvojice:
Write(C, @a1)
Write(B, @b3)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
R
W
R
ok
x
W
x
x
128
1
2
3
4
Nekontrolované paralelní vykonávání (náhodné, round robin)
může generovat libovolné rozvrhy = druhý extrém
Je potřeba definovat korektnost a konfliktní operace
5
6
7
Korektnost, splnění invariantů vztahujeme k sériovému rozvrhu (SR)
Operace nad stejnými daty a alespoň jedna z operací je zápis
Nás budou zajímat pouze takové rozvrhy, které splňují určité
vlastnosti (+ jejich kombinace)
4/20/2015
Uspořádatelnost – stav DB je stejný, jako po provedení nějakého SR
Konfliktová uspořádatelnost – stejné konfliktní dvojice jako nějaký SR
Zotavitelnost – abort neovlivní data potvrzených transakcí
Vyloučení kaskádových abortů – abort s sebou nevezme víc transakcí
Striktnost – čtení a zápis pouze potvrzených dat
Pohledová uspořádatelnost – čtou se stejná data jako v nějakém SR
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
129
1
2
3
4
5
6
7
Rozvrh ekvivalentní (výsledkově, ne průběhem!)
nějakému sériovému rozvrhu, vždy korektní
Obecná uspořádatelnost– těžko detekovatelná
Proto hledáme slabší formu uspořádatelnosti
Závislá pouze na operacích pracujících s DB
DB operace jsou prozatím jen read a write
Následující příklad ukazuje, proč je složité
detekovat obecnou uspořádatelnost
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
130
1
2
3
4
5
6
7
Vrátíme se opět k příkladu s úhradou, pro větší
názornost použijeme Read(x, @x) namísto Read(x)
Úhrada(@částka, @zÚčtu, @naÚčet)
SELECT @x=zůstatek FROM Účet WHERE čÚčtu = @zÚčtu
SELECT @y=zůstatek FROM Účet WHERE čÚčtu = @naÚčet
// If (z < částka) ZrušTransakci(„Nedostatek peněz na účtu!“)
UPDATE Účet SET zůstatek = @x – @částka WHERE @čÚčtu = @zÚčtu
UPDATE Účet SET zůstatek = @y + @částka WHERE @čÚčtu = @naÚčet
// READ(zU, @x)
// READ(naU, @y)
// WRITE(zU, @x)
// WRITE(naU, @y)
Potvrdit transakci
T1:Exec Úhrada(100, ‘U1’, ‘U2’); T2:Exec Úhrada(100, ‘U2’, ‘U1’);
Po provedení obou operací očekáváme, že systém bude
v původním stavu, tj. ve stavu před spuštěním operací
(T2 je v podstatě kompenzující transakce k T1)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
131
1
2
3
4
5
6
7
Sériové spuštění {T1, T2} a {T2, T1} – v systému stále 2000 Kč
T1
T2
Read(U1, @x)
U1
U2
1000
1000
T1
T2
U1
U2
Read(U2, @x)
1000
1000
Read(U2, @y)
Read(U1, @y)
@x = @x – 100
@x = @x – 100
@y = @y + 100
@y = @y + 100
Write(U1, @x)
900
1000
Write(U2, @x)
1000
900
Write(U2, @y)
900
1100
Write(U1, @y)
1100
900
4/20/2015
Read(U2, @x)
Read(U1, @x)
Read(U1, @y)
Read(U2, @y)
@x = @x – 100
@x = @x – 100
@y = @y + 100
@y = @y + 100
Write(U2, @x)
900
1000
Write(U1, @x)
1000
900
Write(U1, @y)
1000
1000
Write(U2, @y)
1000
1000
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
132
1
2
3
4
5
6
7
Prokládané spuštění T1 a T2
T1
T2
Read(U1, @x)
U1
U2
1000
1000
Read(U2, @y)
Rozvrh není uspořádatelný
@x = @x – 100
@y = @y + 100
Write(U1, @x)
900
1000
900
1100
Write(U2, @x)
900
900
Write(U1, @y)
1000
900
Důsledek – z banky zmizí 100Kč
Read(U2, @x)
Write(U2, @y)
Read(U1, @y)
@x = @x – 100
@y = @y + 100
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
133
1
2
3
4
5
6
7
Jinak prokládané spuštění T1 a T2
T1
T2
Read(U1, @x)
U1
U2
1000
1000
Read(U2, @y)
Rozvrh není uspořádatelný
@x = @x – 100
@y = @y + 100
Důsledek – sice nezmizí peníze,
ale zmizí efekt T1 !!! (= lost update)
Read(U2, @x)
Read(U1, @y)
Write(U1, @x)
900
1000
Write(U2, @y)
900
1100
Write(U2, @x)
900
900
Write(U1, @y)
1100
900
@x = @x – 100
@y = @y + 100
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
134
1
2
3
4
5
6
7
Stejně prokládané spuštění T1 a T2, ale teď T1 převádí 0 Kč
T1
T2
Read(U1, @x)
U1
U2
1000
1000
Tj. T1:Exec Úhrada(0, ‘U1’, ‘U2’);
T2:Exec Úhrada(100, ‘U2’, ‘U1’);
Rozvrh je uspořádatelný!
Read(U2, @y)
@x = @x – 0
Důsledek – uspořádatelnost
závisí i na hodnotách v programu
@y = @y + 0
Read(U2, @x)
Read(U1, @y)
Write(U1, @x)
1000
1000
Write(U2, @y)
1000
1000
4/20/2015
Proto není možné jednoduše a
levně detekovat uspořádatelnost
@x = @x – 100
Dále se proto omezíme pouze na
operace s DB – Read a Write
@y = @y + 100
R
W
Write(U2, @x)
1000
900
R
ok
x
Write(U1, @y)
1100
900
W
x
x
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
135
1
2
3
4
5
6
7
Jako jediná nemá vliv na výsledek výpočtu (i konzistenci DB)
Pouze čtení společných dat, tj. na pořadí Ti a Tj nezáleží
Příklad
T1
T2
Předpoklad A = 0
Read(A)
B = A + 10
Read(A)
C =A +5
Sériové vykonání
S(T1, T2) A = 0, B = 10, C = 5
S(T2,T1) A = 0, B = 10, C = 5
Write(C)
Paralelní vykonání
P A = 0, B = 10, C = 5
Write(B)
COMMIT
COMMIT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
136
1
2
3
4
5
6
7
Neopakovatelné čtení (nonrepeatable read)
Transakce T2 zapíše objekt A, který předtím přečetla zatím
nepotvrzená T1, příklad, který vede k nekonzistenci dat:
T1
T2
Read(A)
A = 10
Write(A)
C =A +5
A=A +5
Write(C)
Write(A)
Předpoklad A = 0
Sériové vykonání
S(T1, T2) A = 10, B = 15, C = 15
S(T2,T1) A = 15, B = 25, C = 15
Paralelní vykonání
P A = 5, B = 15, C = 15
B = A + 10
Write(B)
COMMIT
COMMIT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
137
1
2
3
4
5
6
7
Čtení nepotvrzených dat (dirty read)
T2 čte hodnotu A, kterou T1 zatím nepotvrdila, tj. mohou se číst
nekonzistentní data, viz příklad, který vede k nekonzistenci dat:
T1
T2
Read(A)
A = A - 1000
Předpoklad A = 1000, B = 1000
Write(A)
Read(A)
Read(B)
A = A * 1.01, B = B * 1.01
Write(A)
Write(B)
COMMIT
Sériové vykonání
S(T1, T2) A = 0, B = 2020
S(T2,T1) A = 10, B = 2010
Paralelní vykonání
P A = 0, B = 2010
Read(B)
B = B + 1000
Write(B)
COMMIT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
138
1
2
3
4
5
6
7
Přepsání nepotvrzených dat
T2 přepíše hodnotu B, kterou předtím zapsala stále
běžící T1, příklad, který vede k nekonzistenci dat:
T1
T2
A = B = 10
A = B = 20
Write(A)
Write(B)
Předpoklad A = 0, B = 0
Sériové vykonání
S(T1, T2) A = 20, B = 20
S(T2,T1) A = 10, B = 10
Write(B)
Paralelní vykonání
P A = 10, B = 20
Write(A)
COMMIT
COMMIT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
139
1
2
3
4
5
6
7
Transakce je množina Ti s částečným uspořádáním <i kde
Ti {ri[x], wi[x] | x je objekt v DB} {ai, ci}
aiTi xor ciTi
Pokud q{ai, ci} a qTi pak p Ti platí p <i q
Pokud ri[x], wi[x]Ti pak ri[x] <i wi[x] nebo wi[x] <i ri[x]
x může být atribut, ntice, celý blok, tabulka, …
r,w,a,c = Read, Write, Abort, Commit, relace <i představuje „předcházení“
Transakci je možné zakreslit i jako orientovaný acyklický graf
Dá se zobecnit na multimnožiny (opětovné čtení a zápis hodnot)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
140
1
2
3
4
5
6
7
Nechť T7 = {r7 [x], w7 [x], c7} pak
<7 = {(r 7 [x], w 7 [x]), (w7 [x], c7), (r7 [x], c7)}
Graficky (tranzitivita se nezakresluje do grafu)
r7 [x]
w7 [x]
c7
Proč je relace <i pouze částečné uspořádání?
Nechť T8 = {r8 [x], r8 [y], w8 [x], c8}
Chceme načíst x a y a součet uložit do x
Není důležité, v jakém pořadí x a y načteme, proto v <8 není (r[x], r[y])
<8 = {(r 8[x], w 8[x]), (r 8[y], w 8[x]), (w 8[x], c 8), (r 8[x], c 8) , (r 8[y], c 8)}
Graficky
r 8[x]
r 8[y]
4/20/2015
w 8[x]
c8
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
141
1
2
3
4
5
6
Nechť T = {T1, .., Tn} je množina transakcí
Úplná historie nad T je definována jako množina H s částečným
uspořádáním <H kde
7
H = ni=1 Ti
<H ni=1 <i
Pro libovolnou konfliktní dvojici p, q H platí p <H q nebo q <H p
<H může být i totální uspořádání, pak se historie zapisuje jako
řetězec bez šipek. Např. H = w1[x] r2[x] w2[y] c2 c1
Historie může obsahovat potvrzené, zrušené a aktivní transakce
Commit projekce historie, C(H) obsahuje pouze operace
potvrzených transakcí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
142
1
2
3
4
5
6
7
Pokud je alespoň jedna ze dvou prokládaných
operací nad společnými daty write
Dvě nekonfliktní operace lze prohodit
Prohozením konfliktní dvojice se změní výsledek
r1[x] w1[x]
r2[z]
r1[z] w2[y]
r1[y] w2[z]
Tvoří potvrzení konfliktní dvojice? Pokud
transakce neabortují, tak nás pořadí nemusí
zajímat – viz. dále zotavitelné rozvrhy…
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
143
1
2
3
4
5
6
7
Nechť T7 = {r7 [x], w7 [x], c7} a T8 = {r8 [x], r8 [y], w8 [x], c8}
Jaké mohou vzniknout historie? Graf se rozšíří o červené šipky…
r7 [x]
w7 [x]
Možné
konfliktní
dvojice
Jak by vypadaly
příslušné relace <Hi ?
r 8[x]
r 8[x]
r 8[y]
4/20/2015
w7 [x]
c7
w 8[x]
c8
r7 [x]
r 8[x]
r 8[y]
r7 [x]
c8
r 8[x]
w7 [x]
c7
r7 [x]
w 8[x]
c8
w 8[x]
r 8[y]
r7 [x]
c7
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
r 8[y]
r 8[x]
r 8[y]
w7 [x]
c7
w 8[x]
c8
w7 [x]
c7
w 8[x]
c8
144
1
2
3
4
5
6
7
Slabší forma uspořádatelnosti, nicméně, lehce ověřitelná vlastnost
Dvě historie H a H’ nad stejnými transakcemi jsou konfliktově
ekvivalentní, když mají stejné konfliktní dvojice, tj. ve stejném
pořadí nad stejnými objekty
Konfliktová ekvivalence závisí pouze na konfliktních dvojicích
Rozvrh je konfliktově uspořádatelný, pokud je konfliktově
ekvivalentní k nějakému sériovému rozvrhu (v něm nejsou
konflikty)
Výstup konkurentního spuštění transakcí tedy závisí pouze na
uspořádání konfliktních operací
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
145
1
2
3
4
5
6
7
Precedenční graf historie H nad množinou transakcí {T1, .., Tn} je orientovaný graf
Kde uzly jsou transakce z Commit projekce historie H
Hrana mezi uzlem Ti a Tj operace z Ti předchází a je v konfliktu s nějakou operací z Tj
Konfliktová uspořádatelnost se dá detekovat pomocí precedenčního grafu – viz
následující tvrzení (the serializability theorem )
H je uspořádatelná právě tehdy, když precedenční graf neobsahuje cykly
V sériové historii tvoří hrany pořadí spuštění transakcí
Pokud je graf acyklický, můžeme jednoduše najít sériový rozvrh konfliktově ekvivalentní k H
T1
T2
RW
READ(X)
WRITE(X)
T2
T1
WRITE(X)
WW
COMMIT
COMMIT
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
146
1
Nyní budeme uvažovat i případy, kdy T může abortovat
H = w1[x] r2[x] w2[y] c2 c1
2
3
4
5
6
7
H je sice konfliktově uspořádatelná, ale...
Co kdyby T1 abortovala? T2 potvrdila s hodnotami, které se ale abortem
musí změnit na původní – začíná nás zajímat pořadí potvrzení
Ti čte hodnotu x z Tj když
wj[x] < ri[x], aj nepředchází ri[x] v částečném uspořádání
Pokud existuje wk[x] takové že wj[x] < wk[x] < ri[x] pak ak< ri[x]
Tj. když už nějaká Tk přepíše hodnotu x, tak pak abortovala před ri[x]
Říkáme, že Ti čte z Tj, pokud existuje x takové, že Ti čte hodnotu x z Tj
Historie je zotavitelná (RC) tehdy, když
Kdykoliv čte Ti hodnoty z Tj (i j) a ciH, pak cj < ci
Tj. H = w1[x] r2[x] w2[y] c1 c2
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
147
1
2
3
4
5
6
7
H = w1[x] r2[x] w2[y] r3[y] w3[z] c1 c2 c3
Konfliktově uspořádatelná a zotavitelná, ale…
Pokud by T1 abortovala, vezme s sebou i T2 a T3
Chceme po plánovači, aby této situaci předcházel
H předchází kaskádovému abortu (ACA)
tehdy, pokud kdykoliv čte Ti hodnotu x z Tj
(i j) v H, pak cj < ri[x]
Tj. H = w1[x] c1 r2[x] w2[y] c2 r3[y] w3[z] c3
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
148
1
2
3
4
5
6
7
H = w1[x] w2[x] c1 c2
Splňuje vše, co bylo doposud definováno, ale ...
Co kdyby (opět) T1 abortovala?
Chceme rozvrh zajišťující jednoduchost rollbacku
H je striktní (ST) tehdy, pokud kdykoliv wj[x] <
oi[x] (i j), buď aj < oi[x] nebo cj < oi[x],
kde oi[x] {ri[x], wi[x]}
Tj. H = w1[x] c1 w2[x] c2
Data změněná transakcí Tj jsou přístupná jiné
transakci Ti teprve tehdy, až Tj skončí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
149
1
2
3
4
5
6
7
Pokud plánovač produkuje „korektní“ historii H, pak
kterýkoliv prefix H’ z H by měl být také „korektní“
uvažujemeli potvrzené transakce
V případě že po prefixu H’ dojde k pádu systému, musí
databázový systém promítnout jen C(H’), která by
měla být korektní
Vlastnost je prefix-commit-closed tehdy, pokud
kdykoliv platí pro historii H, platí také pro historii C(H’)
pro kterýkoliv prefix H’ z H
(C)SR je prefix-commit-closed
RC, ACA, a ST jsou prefix-commit-closed
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
150
1
Nyní budeme uvažovat jiné kritérium pro ekvivalenci historií
Nevíme, jaký výpočet f(x) se odehrává mezi r[x] a w[x]
2
3
4
5
6
7
Víme, že je to funkce závislá na všech předchozích čteních
Takže, pokud čtou dvě historie stejné hodnoty, pak by měly též zapsat to samé
Důsledek
Pokud každá transakce čte všechna svá data ze stejných zápisů v obou historiích, pak
všechny operace w[x] zapisují to samé v obou historiích
Jestliže je pro každé x stejné poslední w[x] v obou historiích, pak je výsledná hodnota
všech dat stejná v obou historiích
r2[x] w2[y] r1[y] r3[y] w1[x] w2[x] w3[x] (pohledově usp. rozvrh)
r2[x] w2[y] w2[x] r1[y] w1[x] r3[y] w3[x] (sériový rozvrh)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
151
1
2
3
4
5
6
7
Poslední zápis hodnoty x v historii H je wi[x] H takové, že
ai H a pro každé wj[x] H (j i) buď wj[x] < wi[x] or aj H
Historie H a H’ jsou pohledově ekvivalentní, když
Vznikly pro stejnou množinu transakcí a stejné operace
Pro libovolné Ti, Tj takové, že ai, aj H (tj. taky ai, ai H’) a pro
každé x, pokud Ti čte x z Tj v H pak Ti čte x z Tj v H’
Pro každé x platí, pokud wi[x] je poslední zápis x v H pak je také
posledním zápisem x v H’
Nedefinované počáteční čtení (inicializace x) neřešíme
Používá se v algoritmech pro „multicopy“ data
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
152
1
5
6
7
Historie H je (konfliktově) uspořádatelná, když je její Commit projekce C(H) (konfliktově)
ekvivalentní k nějaké sériové historii
H je pohledově uspořádatelná, když pro kterýkoliv prefix H’ z H, je C(H’) pohledově
ekvivalentní k nějaké sériové historii
Zdůrazněme “pro kterýkoliv prefix”, aby byla zaručena prefix-commit-closed vlastnost
Představme si historii H, která je neuspořádatelná, ale končí poslední transakcí, která přepíše
vše …
CSR je podmnožinou VSR
4
A teď pohledová uspořádatelnost (VSR)
3
Připomeňme konfliktovou uspořádatelnost (CSR)
2
Tj. pokud je historie CSR tak je také VSR
Opačně to ale obecně neplatí… Uvažujme H = w1[x] w2[x] w1[x]
Všechny praktické algoritmy pro kontrolu konkurence jsou conflict-based.
4/20/2015
Efektivní plánovač produkující přesně množinu všech pohledově uspořádatelných historií
může existovat pouze tehdy, když P=NP
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
153
1
2
3
4
5
6
7
Uvažujme jinou množinu DB operací
Vložení/smazání/čtení unikátního záznamu
Je potřeba redefinovat pojem konflikt(ní dvojice)
Matice kompatibility pro všechny operace
Definice precedenčního grafu je – stejná
Serialization theorem – stejný
Používáme pouze read/write operace kvůli
jednoduchosti a praktičnosti v db systémech
Nicméně, teorie uspořádatelnosti se dá použít na
různé množiny operací
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
154
1
H1:
H2:
H3: w1[x] w1[y] r2[u] w2[x] r2[y] w2[y] c2 w1[z] c1
H4:
H5:
H6: w1[x] w1[y] r2[u] w2[x] r2[y] w2[y] w1[z] c1 c2
H7:
H8:
H9: w1[x] w1[y] r2[u] w2[x] w1[z] c1 r2[y] w2[y] c2
H10:
H11:
H12: w1[x] w1[y] r2[u] w1[z] c1 w2[x] r2[y] w2[y] c2
2
3
4
5
6
7
VSR
H1
H2
H3 CSR
H4
H5
H6
RC
H7
H8
H9
ACA
H10 H11 H12
ST
Serial
VSR – pohledově a CSR – konfliktově uspořádatelná
RC – zotavitelná, ACA – kaskádové aborty, ST striktní
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
155
1
2
3
4
5
6
7
Konkurentním vykonáváním transakcí vzniká rozvrh, jehož
vlastnosti chceme mít pod kontrolou
Chceme prokládané rozvrhy (paralelizace, odezva)
Chceme korektní rozvrhy (výsledkově stejný jako SR)
Vlastnosti musí být (jednoduše) detekovatelné
Zaměření jen na r, w operace s DB, neřešíme aborty
▪ Konfliktová uspořádatelnost – jednoduše z precedenčního grafu
▪ Pohledová uspořádatelnost – řešitelná, ale NP úplný problém
Zaměření na všechny operace s DB – r, w, a, c
▪ Problémy se zotavitelností, kaskádové aborty, jednoduchost rollbacku
V praxi se používají kombinace jednoduchých vlastností
Nyní se zaměříme na způsob, jak jich dosáhnout (protokoly)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
156
1
2
3
4
5
6
7
Rozvrh je posloupnost operací které vykonávají průběžně běžící
transakce, operace jsou libovolně prokládány
S = {T1.Read(X), T1.Write(Y), T2.Read(Y), T2.Read(X), T1.Read(Z), …}
Nelze naplánovat/vytvořit dopředu (rozvrhovač neví, které
transakce dorazí ke zpracování, dokonce ani nezná dopředu
jednotlivé kroky vykonávaných transakcí)
Tzn. rozvrh není vytvořen rozvrhovačem předem, rozvrh je jen
historie provedených operací
Rozvrhovač může jen garantovat vlastnosti rozvrhu pomocí
omezení, které klade na spouštěné transakce (např. pustí transakci
jakmile má potřebné zámky)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
158
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x], r1[y], w1[x], c1, w2[x], …
Databáze
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
159
1
2
3
Konfliktům se zamezuje pomocí zámků, tj. zámky brání přechodu do
nekonzistentního stavu
Zamykání musí být atomická a hlavně levná operace (jinak bottleneck)
Jakou zvolit pro zamykání granularitu (tabulka, stránka, záznam, atd.)?
4
5
6
7
Hrubá – delší pomlky při zpracování (transakce déle čekají na zamčená data), extrémní
případ je sériové zpracování
Jemná – větší režie na zamykání a větší šance na uváznutí (než tisíce zámků, tak raději
blokovat celou tabulku)
Různá – řeší problém neoptimální jednotné granularity pro všechny
Nové operace v transakci
rl[x] – read lock, ru[x] – read unlock
wl[x] – write lock, wu[x] – write unlock
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
rl
wl
rl
ok
x
wl
x
x
160
1
2
3
4
5
6
7
Komponenta zajišťující následující operace (dle typu značíme jako rl[x], wl[x], …)
Zamknout(Id transakce, Id objektu, typ zámku)
Odemkount(Id transakce, Id objektu)
Odemkount(Id transakce)
Používá paměťovou tabulku zámků
Pro objekt udržuje dva seznamy - držené a zatím nepřidělené zámky
Implementováno jako hash tabulka
Příklad pro rozvrh S = {T1.Read(X), T1.Write(Y), T2.Read(Y), T3.Read(X), T1.Read(Z), …}
Držené zámky
4/20/2015
h(X)
[T1, read], [T3, read]
h(Y)
[T1, write]
h(Z)
[T1, read]
Požadavky na zámek
[T2, read]
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
161
1
2
3
4
5
Manažer zámků může pracovat s libovolným typem objektů, k
práci mu stačí pouze identifikátory objektů
Jaký typ objektu se používá závisí na manažeru dat, např. v
architektuře SQL Databáze lze požadovat zámky na
6
7
Stránky - page-oriented file layer
Záznamy - record-oriented layer
Tabulky, sloupce - query executor/optimizer
Zvolená granularita závisí na
Požadované úrovni souběžného zpracovávání
Režii spojené se zamykáním
Složitosti implementace
Zatím budeme uvažovat jednotnou granularitu zamykání
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
162
1
4
5
6
7
Před r[x] je vždy rl[x] a před w[x] je vždy wl[x]
Příklady
r[x] w[y] c
rl[x] r[x] rl[y] w[y] c
rl[x] r[x] wl[y] w[y] c
rl[x] r[x] wl[y] w[y] ru[x] wu[y] c
není dobře formovaná
není dobře formovaná
je dobře formovaná
je dobře formovaná
Dvoufázová transakce
Dvě fáze – 1. pouze zamykání a 2. pouze odemykání
Příklady
rl[x] r[x] ru[x] wl[y] w[y] wu[y] c
rl[x] r[x] wl[y] ru[x] w[y] wu[y] c
r[x] w[y] c
3
Dobře formovaná transakce
2
není dvoufázová
je dvoufázová
je dvoufázová
Legální historie
Transakce dostane na objekt požadovaný zámek jen tehdy, je-li příslušný zámek k dispozici
Příklady pro T1 = {rl1 [x] r1 [x] ru1 [x] c1} a T2 = {wl2[x] w2 [x] wu2 [x] c2}
rl1 [x] r1 [x] wl2[x] w2 [x] wu2 [x] ru1[x]
wl2 [x] w2 [x] wu2 [x] rl1 [x] r1 [x] ru1 [x]
rl2 [x] r2 [x] rl1 [x] r1 [x] ru1 [x] ru2 [x]
4/20/2015
není legální
je legální
je legální
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
rl
wl
rl
ok
x
wl
x
x
163
1
2
3
4
5
6
7
Teorém 1 – Pokud jsou všechny transakce dobře formované a
dvoufázové, pak je jakákoliv legální historie vzniklá z jejich
konkurentního spuštění uspořádatelná.
Důsledek T1 - dobře formované a dvoufázové transakce garantují
korektní konkurentní běh těchto transakcí
Teorém 2 – Pokud není nějaká transakce dobře formovaná nebo není
dvoufázová, je možné vytvořit další transakci (již dobře formovanou
a dvoufázovou) takovou, že výsledný pár transakcí může vést k
historii s cyklem v příslušném precedenčním grafu.
Důsledek T2 - pokud není nějaká transakce dobře formovaná nebo
není dvoufázová, tak to MŮŽE (ale nemusí) vést k problémům
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
164
1
2
3
4
5
6
7
Nechť pi[x] < qj[x] a alespoň jedna z nich je write
A) T jsou dobře formované
B) T jsou dvoufázové
C) Historie H je legální
pli[x]
pi[x]
pui[x]
oli[x]
kdyby qj[x] < pi[x]
Platí, že pui[x] < qlj[x]
Konflikt = cyklus v PG – jen pokud transakce pracují nad společnými daty
qlj[x]
qj[x]
quj[x]
Z A & B & C plyne, že Tj musí vždy čekat, až Ti uvolní zámek, který má pro x
Kvůli dvoufázovosti nemůže nad jediným x vzniknout cyklus mezi Ti a Tj
Cyklus pro různé proměnné x, y také není možný, konfliktu předejde uváznutí
Dokazuje se často sporem – cyklus v PG pui[x] < pui[x] spor
wl1[x] wl2[y] wl1[y] wl2[x]
Důsledek – pokud A & B & C H je konfliktově uspořádatelná
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
165
1
2
4
5
6
7
T1 není dobře formovaná, T2 je ok H legální & neizolovaná
Pokud není T dobře formovaná, tak nastává
▪ Buď operace p[x] na objektu x, která není chráněná pl[x]
▪ Nebo zápis w[x] do x, který je chráněn pouze rl[x]
T1
Příklady historií H
▪ H1 = r1[x] wl2[x] w2[x] wu2[x] w1[x]
▪ H2 = rl2[x] r2[x] wl2[z] w2[z] rl1[x] w1[x] ru1[x] r2[x] ru2[x] wu2[z]
3
RW
T2
WW (WR u H2)
T1 není dvoufázová, T2 je ok H legální & neizolovaná
Pokud není T dvoufázová, tak nastává
▪ Zámek pl[x] na objektu x, poté co byl již jednou odemčen pu[x]
Příklad historie H
▪ H3 = rl1[x] r1[x] ru1[x] wl2[x] w2[x] wu2[x] wl1[x] w1[x] wu1[x]
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
166
1
2
3
4
5
6
7
Získá požadavek pi[x] od transakčního monitoru a otestuje, zda-li je pli[x]
v konfliktu s nějakým již dříve nastaveným qlj[x] (p, q {r, w})
Pokud ano, pak zdrží operaci pi[x], Ti musí čekat, až bude zámek k dispozici
Pokud není v konfliktu, přidělí zámek pli[x] a pošle operaci pi[x] databázi
Jakmile je jednou zámek pli[x] přidělen, tak může být uvolněn nejdříve ve
chvíli, kdy databáze oznámí ukončení zpracování požadavku pi[x]
Jakmile transakce Ti uvolní jakýkoliv zámek, Ti již nemůže žádný jiný
dostat (dvoufázovost = zamykání a odemykání)
Je ale potřeba řešit problémy s uváznutím - wl1[x] wl2[y] wl1[y] wl2[x]
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
167
1
2
3
4
5
6
7
Kdy může plánovač uvolnit zámek pli[x]?
Ti již nebude s objektem x pracovat
2PL → Ti už žádné zámky nebude požadovat
Obecné řešení – uvolnit zámky jedině při ai nebo ci
Plánovač striktního 2PL může uvolňovat rl a wl různě
Uvolní rli[x] zámky ve chvíli, kdy přijde požadavek ai nebo ci
Uvolní wli[x] až jakmile databázové procesy abortují/potvrdí
S2PL užívaný ve většině implementací 2PL
Triviálně řeší problém s uvolňováním zámků
Řeší problémy zotavitelnosti a kaskádových abortů
Stejně jako 2PLneřeší problémy s
▪ Uváznutím transakcí – vzájemné držení a požadování zdrojů
▪ „Hladověním“ transakcí – neustálé přidělování rl[x] brání přidělení wl[x]
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
168
1
5
6
7
wi[x]
wui[x]
plj[x]
pj[x]
puj[x]
wli[x] < i wi[x] < i wui[x] a plj[x] < j pj[x] < j puj[x]
Z konfliktní tabulky zámků plyne
4
Z definice 2PL plyne
3
S2PL generuje CSR & striktní historie (H12) - uvažujme wi[x] <H pj[x] v H
wli[x]
2
wli[x] a plj[x] jsou konfliktní, proto wui[x] < H plj[x] nebo puj[x] < H wli[x]
Z toho plyne wui[x] < H plj[x]
V S2PL platí
H1
H2
H3 CSR
H4
H5
H6
RC
H7
H8
H9
ACA
H12
ST
H10 H11
Buď ai < H wui[x] or ci < H wui[x]
Proto ai < H pj[x] or ci < H pj[x]
4/20/2015
VSR
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
Serial
169
1
2
3
4
5
6
7
Jak zabránit problému s uváznutím u (S)2PL?
Každá transakce Ti předem deklaruje všechny zámky potřebné pro
všechna r[x] a w[x]
Plánovač se je před startem Ti pokusí zamknout
▪ Pokud uspěje, Ti je spuštěna a pak jsou zámky uvolněny
▪ Pokud neuspěje, čeká ve frontě
Jakmile nějaká Tj skončí, vybere takovou čekající transakci Ti, která
může dostat požadované zámky
U konzervativního 2PL nemůže dojít k uváznutí
Problém je ale v „ … Ti předem deklaruje …“
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
170
1
2
3
4
5
6
7
Výskyt v dynamických DB (tj. uvažujeme i vkládání a mazání záznamů)
Jedna transakce pracuje s množinou entit a druhá ji mění nekonzistence DB
V příkladu rozvrh s fantomem (mají být zamčeni všichni muži)
Jméno
Pohlaví
Věk
rl(Pohlavi = ‘M’)
Karel
M
44
@PocetMuzu = PocetOsob(‘M’)
Jana
Z
28
Petr
M
32
T1
T2
INSERT(‘Jan’, ‘M’, 42)
INSERT(‘Tom’, ‘M’, 50)
INSERT(‘Petra’, ‘Z’, 35)
COMMIT
@Prumer = SoucetVekuOsob(‘M’) / @PocetMuzu
Sériové vykonání
S(T1, T2) @Prumer = 38
S(T2, T1) @Prumer = 42
PRINT(@Prumer)
ul(Pohlavi = ‘M’), COMMIT
4/20/2015
Paralelní vykonání
P @Prumer = 84 !!!
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
171
1
2
3
4
5
6
7
Pokud transakce čte data opakovaně, musí načíst to samé!
T1: SELECT Count(*) FROM Osoba
WHERE Věk ≥ 38
T2: INSERT INTO Osoba
VALUES (‘Dan’, ‘M’, 47)
T1: SELECT Sum(*) FROM Osoba
WHERE Věk ≥ 38
Jméno
Pohlaví
Věk
Karel
M
44
Jana
Z
28
Petr
M
32
Jan
M
42
Tom
M
50
Petra
Z
35
Potřebujeme jiný mechanismus zamykání umožňující rl(Věk ≥ 38)
Jana
28
Petr
29
30
31
32
Petra
33
34
35
Jan
36
37
38
39
40
41
42
Karel
43
Dosud uvažované zamykání existujících záznamů nestačí!
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
44
Tom
45
46
47
48
49
50
51
Dan
172
1
2
3
4
5
6
7
Problémy se zamykáním v dynamické DB
Zámky se přidělují objektům, ne všechny jsou ale v DB
Co zamknout, když je výsledek dotazu ?
Co zamknout, když mažeme? Vkládáme?
Triviálně lze řešit zamknutím celé DB SR rozvrh
V praxi se spíš řeší jemnějším zamykáním
Predikátové zámky
Rozsahové zámky
Granulované zámky
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
173
1
2
3
4
Zámek je nastaven na výběrový predikát (… WHERE Věk ≥ 38)
Dva zámky jsou pak v konfliktu, když se jejich predikáty nevylučují
5
6
7
p1(x) = x.Věk ≥ 38, p2(x) = x.Věk ≤ 45, existuje x takové, že p1(x) ˄ p2(x) ??
Problémy
Náklady na realizaci – test na konflikt dvou predikátů je NP-úplný problém, ale
v praxi je potřeba rychlý algoritmus (časté zamykání)
Pesimismus - pro predikáty P1, P2 a systémový invariant I může platit, že P1 &
P2 = true, ale P1 & P2 & I = false
Zdroj predikátu – jak vlastně získat potřebný predikát pro zadaný dotaz,
update?
Precision locks – jednodušší test na konflikt dvou predikátů
Pro predikáty, které se musí zamknout, se musí po každé operaci
▪ Ověřit výsledek oproti predikátům nebo čekat, pokud dojte ke konfliktu
Velká pravděpodobnost uváznutí, navíc není moc efektivní (hodně ověřování)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
174
1
2
3
4
5
6
7
Vhodné pro struktury využívající uspořádání záznamů
Jsou data vůbec uspořádatelná?
Existence záznamů – jak ohlídat „díry“ v uspořádaných datech?
Zjednodušení predikátů - omezení pouze na intervaly v
uspořádáních daných indexy
Typy intervalů
Statické intervaly – nezávisí na datech
Dynamické intervaly – hranice intervalu jsou klíče, které se vyskytují v
indexu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
175
1
2
3
4
5
6
7
Použijeme pro sémantiku zamykání polouzavřené intervaly
Zámek na klíči implikuje i zamčení intervalu (tj. díry) mezi dvěma klíči!
Zamykání následujícího klíče – schopnost zamknout +∞, používá zleva otevřený
interval (x, y], pro neexistující klíč zamkne první větší tj. ten následující
Zamykání předcházejícího klíče – schopnost zamknout nejnižší hodnotu,
používá zprava otevřený interval [x, y), pro neexistující klíč zamkne první menší
Uvažujeme následující typy operací nad uspořádanými daty
Pokud chce Ti číst x které neexistuje, žádná Tj nemůže vytvořit x dokud Ti
neskončí
Pokud čte Ti x a čte i následující y, tak nemůže žádná Tj vložit objekt mezi x a y
dokud Ti neskončí
Pokud Ti smaže x, pak se to ostatní Tj dozví až poté, co Ti skončí
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
176
1
3
4
5
6
7
Dejme tedy tradičnímu zamykání následující sémantiku
Zamykání předcházejícího klíče – pro sekvenci x, y, z zamkne zámek na y interval [y, z)
Zamykání následujícího klíče – pro sekvenci x, y, z zamkne zámek na y interval – (x, y]
2
Pravidla pro načtení unikátního a následujícího záznamu pomocí zamykání předcházejícího klíče
Načtení unikátního x mezi w a y
▪
▪
transakce musí při opakovaném čtení
načíst to samé, zamčený objekt hlídá
interval, kde se nesmí vyskytnout insert
Pokud x existuje, zamkne pro čtení x, což implikuje zámek [x, y)
Pokud x neexistuje, zamkne pro čtení w, což implikuje zámek [w, y)
Načtení následujícího y poté, co načte unikátní x mezi w a y
▪
▪
Již zamknuto pro čtení x, což implikuje existenci zámku [x, y)
Zamkne pro čtení y, což implikuje zámek [y, z)
Jana
28
Petr
29
30
31
32
Petra
33
34
35
Jan
36
37
38
39
40
41
42
Karel
43
44
Tom
45
46
47
48
49
50
51
rl(38)
rl(42)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
177
1
3
4
5
6
7
Dejme tedy tradičnímu zamykání následující sémantiku
Zamykání předcházejícího klíče – pro sekvenci x, y, z zamkne zámek na y interval [y, z)
Zamykání následujícího klíče – pro sekvenci x, y, z zamkne zámek na y interval – (x, y]
2
Pravidla pro vkládání a mazání pomocí zamykání předcházejícího klíče
Vložení x mezi w a y
▪
▪
▪
aby transakce mohla vložit objekt mezi w a y,
tak nesmí jiná transakce držet zámek na w
při vkládání se musí zamknout i „neexistující“ x !!!
Zamkne pro zápis w, což implikuje zámek [w, y)
Zamkne pro zápis x, což implikuje zámek [x, y)
Vloží x, změní se interval zámku z [w, y) na [w, x)
Smazání x mezi w a y
▪
▪
▪
Jana
28
Petr
29
30
31
wl(28)
INSERT(30)
wl(28)
4/20/2015
aby transakce T mohla smazat objekt mezi w a y,
tak nesmí jiná transakce držet zámek na w, jinak
by T nemohla zamknout [w, y) pro případný abort
Zamkne pro zápis w, což implikuje zámek [w, x)
Zamkne pro zápis x, což implikuje zámek [x, y)
Smaže x, zámek na w pak implikuje interval zámku [w, y)
32
;
Petra
33
34
35
Jan
36
37
38
39
wl(35)
wl(30)
40
41
42
Karel
43
44
Tom
45
46
47
48
49
50
51
;
wl(42)
DELETE(42)
wl(35)
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
178
1
2
3
4
5
6
7
Používají se pro data organizovaná do logických hierarchií, kde zámek na
určitém uzlu hierarchie implikuje zámky na všech potomcích
Jednoduchá forma predikátových zámků – predikát představuje objekty v podstromu
Velké transakce tak mohou zamykat celé tabulky – málo zámků
Jednoduché transakce zamykají jen jednotlivé záznamy – propustnost
Používá se obvykle s 2PL protokolem
Lze je použít i pro intervalové zamykání (různá velikost intervalů)
Příklad - strukturální hierarchie V MS SQL 2008
DB, …, File, Table, Heap or B-Tree, Extent (8 pages), Page (8KB), Key (range), RID
Systém automaticky volí vhodnou granularitu pro danou transakci
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
179
1
4
5
6
7
Než se přidělí uzlu zámek, je potřeba vyloučit existenci konfliktních zámků u všech jeho potomků !!!
Průchod grafem je neefektivní a pomalý
Uzel již zamčen jako…
Používají se intenční zámky - il
il
rl
wl
il
Ano
Ano
Ne
Ne
rl
Ano
Ne
Ano
Ne
Ano
Ne
Ne
Ne
Chceme
Pravidla pro zamykání s il
3
Jak ale zajistit zamykání na hierarchiích?
2
Zámky se získávají od kořene k listům
wl
Zámky se uvolňují směrem od listů ke kořenu
Před zamčením uzlu musí být zamčený rodič intention zámkem
Tabulka pro vydání požadovaného zámku
Problém - jednoduché il zámky umožní kolizi dvou rl zámků na různých úrovních
Proto se ještě zvlášť rozlišují il pro čtení (irl) a pro zápis (iwl)
Pravidla se pak upraví následně
▪
▪
4/20/2015
Zámky se získávají od kořene k listům a uvolňují od listů ke kořenu
Před zamčením uzlu rl/wl zámkem, musí být rodič zamknutý irl/iwl zámkem
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
180
1
2
3
4
5
6
7
Intenční zámky a tabulka kompatibility zámků
irl – v podstromu bude požadován rl
iwl – v podstromu bude požadován wl
riwl – uzel uzamčen pro čtení, v podstromu bude požadován wl
Uzel již zamčen jako…
irl
iwl
rl
riwl
wl
irl
Ano
Ano
Ano
Ano
Ano
Ne
iwl
Ano
Ano
Ano
Ne
Ne
Ne
rl
Ano
Ano
Ne
Ano
Ne
Ne
riwl
Ano
Ano
Ne
Ne
Ne
Ne
wl
Ano
Ne
Ne
Ne
Ne
Ne
Chceme
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
181
1
3
4
5
6
7
Po načtení objektu často dochází k zesílení rl na wl – může docházet k uváznutí
2
… rl3[x] r3[x] rl1[x] r1[x] rl2[x] r2[x] c3 wl1[x] wl2[x] uváznutí
Proto se množina zámků rozšiřuje ještě o tzv. update zámky ul
Update zámek lze získat i když je objekt zamčen pro čtení, ale ne naopak
Pouze update a riwl zámek lze zesílit na wl méně uváznutí
… rl3[x] r3[x] ul1[x] r1[x] c3 wl1[x] w1[x] c1 ul2[x] r2[x] wl2[x] w2[x] …
Uzel již zamčen jako…
irl
iwl
rl
riwl
ul
wl
irl
Ano
Ano
Ano
Ano
Ano
Ne
Ne
iwl
Ano
Ano
Ano
Ne
Ne
Ne
Ne
rl
Ano
Ano
Ne
Ano
Ne
Ne
Ne
riwl
Ano
Ano
Ne
Ne
Ne
Ne
Ne
ul
Ano
Ano
Ne
Ano
Ne
Ne
Ne
wl
Ano
Ne
Ne
Ne
Ne
Ne
Ne
Chceme
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
182
1
2
3
4
5
Pokud je v T objekt x uzamčen pl[x] a je v T
požadován v jiném módu ql[x], tak je výsledekm
maximum módů pl[x] a ql[x]
Částečné uspořádání zámků je dáno obrázkem
iwl
7
riwl
irl
wl
rl
4/20/2015
6
ul
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
183
1
2
3
Pokud se ukáže, že zvolená granularita zamykání není optimální
Příklady
4
5
6
7
Projíždíme celou tabulku, nemá cenu zamykat po řádku
Systém udělá chybu, zbytečně zamkne hodně záznamů
Řešení
Změnit například irl za rl v uzlu hierarchie
Escalation treshold – většinou 1000 zámků
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
184
1
2
3
4
Transakce může přistoupit k datům jen za použití B+-stromu (každá
relace musí mít aspoň jeden), neplést s granulovanými zámky !!!
Používá 2PL protokol pro vnitřní uzly na cestě k listu
Vyhledávání
5
6
7
Transakce musí uzamknout uzly zámkem pro čtení
Drží zámek na list i když neobsahuje hledaná data
Vkládání/mazání/změna dat
Musí obdržet exkluzivní zámky na uzly
Musí aktualizovat i všechny indexy pro danou relaci (tj. nejen data)
Garantuje prevenci fantoma, ale nevyužívá dalších informací
Vyšší vrstvy B+-stromu pouze směrují vyhledávání
Vnitřní uzly se musí zamykat jen v případě, že k nim může dorazit štěpení
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
185
1
2
3
4
5
6
7
B+-strom je populární datová struktura pro relačních databáze
B+-strom je potřebný hlavně k optimalizaci vyhledávání a je
proto neustále využívanou strukturou
Používat 2PL na cestu od kořene k listu je příliš omezující !!!
Snaha o dřívější uvolňování zámků na vnitřní uzly
Crabbing protokol (odvozeno od chůze kraba)
B-link protokol
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
186
1
2
3
4
5
6
7
Vyhledávání
Zamkne se aktuálně zpracovávaný uzel pro čtení
Až poté co zamkne všechny jeho potomky pro čtení uvolní zámek na uzlu
Vkládání/mazání
Cestou k listu stejně jako při vyhledávání (neblokuje se s dotazy)
Zesílí zámek držený pro daný list na zámek pro zápis
Při štěpení/slévání uzlů zamkne rodičovský uzel pro zápis
Náchylné k uváznutí
Vyhledávání se vzájemně blokuje se zámky potřebnými pro štěpení/slévání
Možno řešit restartem transakce, která jde směrem k listu
Namísto restartu se může modifikovat zamykání a odemykání rodiče
Používat jen exkluzivní zámky pro vkládání/mazání (blokování dotazů)
Odemknout uzly až ve chvíli, kdy je jasné že se k nim nebude propagovat
štěpení (např. některý z potomků není plný)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
187
1
2
3
4
5
Úprava struktury - sourozenci na každé úrovni B+-stromu jsou
propojeni ukazateli (tvoří spojový seznam)
Vyhledávání
6
7
Používá zámky pro čtení, zámek pro rodiče je uvolněn ještě před
zamčením potomka
Neblokuje rodiče pro případné štěpení, čeká až proběhne, pak stejně
načte co má díky propojení uzlů na stejné úrovni
▪ Před štěpením potomka T nenašla v rodičovském uzlu nový směrovací záznam
▪ Štěpený potomek je ale ve výsledku propojený s nově vzniklým uzlem!
▪ „Přeskočení“ nového směrovacího záznamu tak nemá vliv na výsledek
Vkládání/mazání
Stejné jako hledání, jen používá exkluzivní zámky pro listy
V případě štěpení zamkne rodičovský uzel pro zápis (nyní již není
blokován jinou transakcí)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
188
1
2
3
4
5
Transakce Ti žádá prostředky, které drží jiná transakce Tj. Ta požaduje
zase prostředky, které drží transakce Ti. Obě jsou tudíž zablokovány
Může nastat i při S2PL
Jak se vypořádat s uváznutím
6
7
Detekce a vyřešení
▪ Waits-for graf, transakce dlouho nic nedělá, …
▪ Restartovat (i jen částečně) transakci dle nějakého kritéria (log, čas)
Prevence
▪ Konzervativní 2PL protokol (všechny zámky už na začátku)
▪ Prioritní/časové upřednostňování (časové razítko určuje prioritu)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
189
1
2
3
Na začátku běhu získá transakce časové razítko
Wait/Die
4
5
6
7
Dříve spuštěná transakce může čekat na zámek držený
později spuštěnou transakcí
Později spuštěná transakce nikdy – je zrušena
Wound/Wait strategie
Dříve spuštěná transakce zruší později spuštěnou transakci
v případě konfliktu zámků
V opačném případě později spuštěná transakce čeká
Restart probíhá s původním časovým razítkem – proč?
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
190
1
2
3
4
5
6
7
Aby nastalo uváznutí, musí být současně splněny všechny čtyři
následující podmínky
Vzájemné vyloučení - prostředek přidělen jen jednomu procesu
Držení prostředků - proces může držet a přitom žádat další prostředky
Neodnímatelnost - prostředky může vrátit pouze proces, který je
vlastní
Čekání do kruhu - existuje cyklus ve waits-for grafu
Obecná řešení uváznutí
T1 chce prostředky držené T2
T1
T2
Vůbec si problému nevšímat
T2 chce prostředky držené T1
Detekce a zotavení
Opatrné přidělování zámků (dynamická metoda)
Prevence zajištěná nesplněním jedné ze čtyř podmínek
Transakce podporují rollback – uváznutí je možné řešit i triviálně
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
191
1
6
7
Čekání na prostředky musí být vzácné (jinak je systém špatně navržen)
Uváznutí je pak o to víc vzácné
R zdroji, N+1 transakcemi a A+1 update akcemi
Předpokládáme N * A << R (většina zdrojů odemčena)
N transakcí, každá má zamčeno A/2 z R zdrojů
Pakce = N * A / (2 * R)
Pravděpodobnost, že je transakce blokovaná
5
Pravděpodobnost, že je akce blokovaná
4
Uvažujme systém s
3
Hypotéza
2
A pokusů o uzamčení
Ptransakce = 1 – (1 – Pakce)A N * A2 / (2 * R)
Pravděpodobnost, že dojde k uváznutí
4/20/2015
Uvažujeme cykly délky 2, delší jsou ještě vzácnější
Puváznutí Ptransakce 2 / N = N * A4 / (4 * R2)
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
192
1
2
3
4
5
6
7
Problém je v dlouhotrvajících transakcích
Měřeno v počtu vyžádaných zámků
Oprávňuje používání krátkodobých zámků
Oprávňuje používání zámků jen pro čtení
Problém je ve velkém počtu transakcí
Oprávňuje architekturu s transakčním monitorem
Pokud je čekání vzácné, uváznutí je vzácné2
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
193
1
2
3
4
5
Sice známe postačující podmínky pro zajištění izolace,
ale…
V řadě situací jsou příliš omezující
6
7
Např. průměr hodnot ve velké DB = zamknout vše
Důsledek – je potřeba hledat kompromisy – jak zamykat,
aby byl výsledek dostatečně izolovaný a přitom moc
nebrzdil
Jedno z řešení jsou stupně izolace – kompromisy
Uživatel ví co dělá, popř. se mohou některé povolit jen pro čtení
Možnost kombinace stupňů izolace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
194
1
2
3
4
5
6
7
Stupeň 0: Transakce nepřepíše cizí data, pokud ta jsou
součástí transakce alespoň stupně 1, tj. zamykání je dobře
formované s ohledem na zápis ale není dvoufázové.
Stupeň 1: Transakce nebude mít lost updates - zamykání je
dvoufázové s ohledem na exkluzivní zámky a dobře
formované s ohledem na zápis.
Stupeň 2: Transakce nebude mít lost updates ani dirty
reads - zamykání je dvoufázové s ohledem na exkluzivní
zámky a dobře formované.
Stupeň 3: Transakce bude úplně izolovaná - zamykání je
dvoufázové a dobře formované.
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
195
1
Úroveň
WR
RW
Fantom
READ UNCOMMITTED
(read only transakce)
možná
možná
možná
READ COMMITTED
Ne
možná
možná
REPEATABLE READ
Ne
Ne
možná
SERIALIZABLE
Ne
Ne
Ne
2
3
4
5
6
7
READ UNCOMMITTED v MS SQL
4/20/2015
Nepoužívají se zámky na čtení, S2PL na zápis
Je možné číst nekonzistentní data
Je možné načíst podruhé jiná data
Není prevence fantoma
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
196
1
Úroveň
WR
RW
Fantom
READ UNCOMMITTED
(read only transakce)
možná
možná
možná
READ COMMITTED
Ne
možná
možná
REPEATABLE READ
Ne
Ne
možná
SERIALIZABLE
Ne
Ne
Ne
2
3
4
5
6
7
READ COMMITTED v MS SQL
Čtení je dobře formované ale ne dvoufázové , S2PL na zápis
Zámek se uvolní po přečtení záznamu/stránky/tabulky
Je možné načíst podruhé jiná data
Není prevence fantoma
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
197
1
Úroveň
WR
RW
Fantom
READ UNCOMMITTED
(read only transakce)
možná
možná
možná
READ COMMITTED
Ne
možná
možná
REPEATABLE READ
Ne
Ne
možná
SERIALIZABLE
Ne
Ne
Ne
2
3
4
5
6
7
REPEATABLE READ v MS SQL
Čtení i zápis S2PL
Není prevence fantoma
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
198
1
Úroveň
WR
RW
Fantom
READ UNCOMMITTED
(read only transakce)
možná
možná
možná
READ COMMITTED
Ne
možná
možná
REPEATABLE READ
Ne
Ne
možná
SERIALIZABLE
Ne
Ne
Ne
2
3
4
5
6
7
SERIALIZABLE v MS SQL
Čtení i zápis S2PL
Intervalové zámky pro prevenci fantoma
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
199
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x], r1[y], w1[x], c1, w2[x], …
Databáze
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
201
1
Nepoužívá zámky, zatím se v komerčních systémech moc neujalo
Je založeno na časovém uspořádání (Time Ordering)
5
6
7
Každá transakce má přiřazeno unikátní časové razítko ts(Ti)
Pro každé dvě různé transakce platí ts(Ti) < ts(Tj) nebo ts(Tj) < ts(Ti)
Každá operace pi[x] je označena pomocí ts(Ti)
Jednoduchý monitor – počítadlo, hodiny
Více monitorů v systému – [počítadlo, TM_Id] jako razítko
Pokud pi[x] a qj[x] jsou konfliktní operace, pak databáze zpracuje pi[x] před qj[x] právě tehdy,
když ts(Ti) < ts(Tj)
Pokud je H historie reprezentující výpočet plánovaná pomocí TO pravidla, pak je H uspořádatelná
4
TO pravidlo – konfliktní operace jsou seřazeny dle odpovídajících časových razítek
3
Jak transakci přiřadit časové razítko?
2
Pokud v PG existuje hrana mezi Ti Tj, pak v H existuje konfliktní dvojice pi[x] < qj[x]
Z toho plyne, že používáním TO pravidla musí platit ts(Ti) < ts(Tj)
V případě cyklu T1 .. Tn T1 v PG by muselo platit ts(T1) < ts(T1) SPOR
Používání TO pravidla má stejný efekt, jako sériový rozvrh uspořádaný dle časových razítek
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
202
1
4
5
6
7
Plánovač přeposílá pi[x] z monitoru do DB (FIFO)
Posloupnost pi[x] qj[x] oi[x] která vede ke konfliktu poruší TO pravidlo - oi[x] požadavek přišel
pozdě
V takovém případě (odmítnutí oi[x]) dojde k abortu Ti, Ti pak musí dostat nové časové razítko
Jak poznat, že požadavek poruší TO pravidlo (přišel pozdě)?
Pro každou datovou položku udržujeme maximální časové razítko pro čtení a zápis, např. v
polích rts[x] a wts[x]
Plánovač po obdržení požadavku ri[x]
▪
▪
Pokud ts(Ti) < wts[x] pak odmítne ri[x], tj. abortuje Ti
Jinak pustí ri[x] a pokud ts(Ti) > rts[x] pak rts[x] = ts(Ti)
Plánovač po obdržení požadavku wi[x]
▪
▪
3
Jednoduchá agresivní implementace TO pravidla
2
Pokud ts(Ti) < rts[x] nebo ts(Ti) < wts[x] pak odmítne wi[x], tj. abortuje Ti
Jinak pustí wi[x] a pokud ts(Ti) > wts[x] pak wts[x] = ts(Ti)
Plánovač by měl garantovat, že bude databáze zpracovávat požadavky ve
stejném pořadí, v jakém jsou předloženy (čekání na potvrzení z DB)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
203
1
2
3
4
5
6
7
Pro každou datovou položku si plánovač uchovává počet r[x]
a w[x], které byly odeslány do DB ale nebyly potvrzeny
Použijeme pole r-nepotvrzeno[x] a w-nepotvrzeno[x]
Je potřeba fronta požadavků na DB, uspořádaná dle
časového razítka, plánovač pak funguje následovně
Po obdržení požadavku ri[x]
▪ Pokud w-nepotvrzeno[x] > 0 pak vloží ri[x] do fronty
▪ Jinak pustí ri[x] a inkrementuje r-nepotvrzeno[x]++
Po obdržení požadavku wi[x]
▪ Pokud r-nepotvrzeno[x] + w-nepotvrzeno[x] > 0 pak vloží wi[x] do fronty
▪ Jinak pustí wi[x] a inkrementuje w-nepotvrzeno[x]++
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
204
1
3
4
5
6
7
Základní TO pravidlo zajišťuje uspořádatelnost, ale ne zotavitelnost – viz. příklad
2
ts(T1) = 1, ts(T2) = 2, H = w1[x] r2[x] w2[y] c2
H je CSR ale ne RC (potvrzující T2 čte z T1, která nepotvrdila)
Pravidla pro striktní TO
w-nepotvrzeno[x] je buď 0 nebo 1, protože zápis blokuje další zápisy
w-nepotvrzeno je nastaveno na 0 pouze tehdy, když plánovač obdrží od DB potvrzení o ci nebo ai
Když nastane ci nebo ai, w-nepotvrzeno[x] je nastaveno na 0 pro jakékoliv x pro které bylo wi[x]
zasláno databázi transakcí Ti
V základním TO pravidle je w-nepotvrzeno nastaveno na 0 pokud DB potvrdí přijetí wi[x]
Pokud je w-nepotvrzeno[x] nastaveno na 1, tak dojde k blokování všech konfliktních
operací
4/20/2015
Tj. dojde ke zdržení rj[x] a wj[x] s ts(Tj) > ts(Ti) do doby, než Ti potvrdí nebo abortuje
A proto je výsledná historie striktní, navíc, protože Tj čeká na Ti pouze tehdy, pokud ts(Tj) > ts(Ti), tak
nemůže dojít k uváznutí
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
205
1
2
3
4
5
6
7
Nastavení w-nepotvrzeno[x] se chová podobně jako zámek
Získali jsme tak z TO pravidla 2PL plánovač? Uvažujme historii H
H = r2[x] w3[x] c3 w1[y] c1 r2[y] w2[z] c2
H je ekvivalentní sériové historii T1 T2 T3
(r2[x] < w3[x], w1[y] < r2[y]) a tak SR
H je striktní (w1[y] < r2[y], ale c1 < r2[y])
Uvažujme TO
▪ Pokud ts(T1) < ts(T2) < ts(T3) pak H vznikla užitím striktního TO plánovače
Uvažujme 2PL
▪ T2 musí uvolnit zámek rl2[x] před spuštěním w3[x]
▪ T2 nemůže nastavit rl2[y] dokud nepřijde c1 kvůli w1[y]
▪ Kvůli w3[x] < w1[y] dojde k porušení dvoufázovosti
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
206
1
2
3
4
5
6
7
Pokud agresivní plánovač získává často operace různých časových
razítek (1, 4, 3, 1, 4, 2, …), tak to může vést k příliš častým abortům
Konzervativnější verze TO plánovače
Pozdržet některé operace (čekat na operace starších transakcí )
Ale, zdržení operace = zdržení transakce = holt něco za něco …
Ultimátní konzervativní TO plánovač nikdy neabortuje transakce
Požadavky na systém
▪ Deklarovat předem všechna r[x] a w[x]
▪ Spouštět operace v pořadí časových razítek
Pokud není splněné (např. nemáme deklarace r[x] a w[x])
▪ Fronta operací uspořádaná dle časových razítek
▪ Plánovat pouze hlavu fronty, pokud fronta obsahuje alespoň jednu operaci z
každé aktivní transakce
Produkuje sériové historie…
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
207
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x], r1[y], w1[x], c1, w2[x], …
Databáze
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
208
1
2
3
4
5
Opět nepoužívá zámky, zatím se v komerčních systémech
moc neujalo
Je postaveno na udržování lehce modifikovaného
precedenčního grafu, ve kterém se hlídá acykličnost
Modifikovaný precedenční graf (MPG)
6
7
Neobsahuje všechny potvrzené transakce (jsou odebrány takové,
které byly dávno ukončené)
Uzly všech aktivních transakcí jsou uloženy (až na zrušené a
potvrzené)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
209
1
2
3
4
5
6
7
Plánovač obdrží pi[x] z monitoru
Přidá do MPG uzel Ti v případě, že tam ještě není
Přidá hranu z Tj do Ti pro každou dříve plánovanou operaci qj[x], která
je konfliktní s pi[x]
Pokud MPG obsahuje cyklus pak zamítne pi[x]
Abortuje Ti, tj. zašle ai databázi a smaže Ti z MPG
Smaže z MPG také všechny hrany incidentní s Ti
Tímpádem zůstane MPG acyklický
Pokud zůstane MPG acyklický pak přijme pi[x]
Plánuje pi[x] poté, co databáze potvrdí všechny dříve zaslané operace
konfliktní s pi[x]
Implementováno podobně jako u základního TO pomocí FIFO fronty a
pomocí polí r-nepotvrzeno[x] a w-nepotvrzeno[x]
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
210
1
3
4
5
6
7
Jak zjistit všechny dříve plánované operace qj[x], které jsou konfliktní s pi[x] ??
2
Pro každou Ti v MPG je potřeba udržovat seznam objektů x, pro které bylo plánováno
čtení a zápis - použijeme pole r-plánováno[Ti] a w-plánováno[Ti]
pi[x] je konfliktní s dříve plánovanou operací qj[x] z Tj když
x q-plánováno[Tj] pro q konfliktní s p, tj.
ri[x] je konfliktní s dříve plánovanou operací wj[x] z Tj když x w-plánováno[Tj]
wi[x] je konfliktní s dříve plánovanou operací qj[x] z Tj když
x r-plánováno[Tj] nebo x w-plánováno[Tj]
Kdy je možné smazat r-plánováno[Ti] a w-plánováno[Ti]? Ne s potvrzením Ti!!!
Uvažujme H = rk+1[x] w1[x] w1[y1] c1 w2[x] w2[y2] c2 … wk[x] wk[yk] ck
Uvažujme wk+1[z], pokud z {x, y1, …, yk} pak vznikne cyklus v MPG
Ač T1, …, Tk potvrdily, je potřeba stále ještě udržovat jejich pole q-plánováno !!!
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
211
1
2
3
4
5
6
7
Takže, kdy je možné smazat r-plánováno[Ti] a w-plánováno[Ti] ???
V případě, že se Ti již nemůže vyskytnout v žádném cyklu v MPG
Cyklus zahrnující Ti implikuje alespoň jednu vstupní Tj Ti a jednu výstupní
hranu Ti Tk
▪ Nová výstupní hrana se může objevit po skončení
▪ Nová vstupní hrana se nemůže objevit po skončení
Důsledek – jakmile z uzlu Ti hrany pouze vychází, tak již Ti nemůže být součástí
cyklu a pokud již skončila, tak může být odebrána
Testováním MPG na cyklus plánovač umožňuje prokládání čtení a zápisů
x, která vedou k uspořádatelnému rozvrhu
Je shovívavější než…
TO plánovač - umožňuje jen takové prokládání, které je dáno časovými razítky
operací ri[x] a wi[x] – tj. u TO neprojde například rozvrh r1[x], r2[x], w1[x]
2PL plánovač - neumožňuje určitá prokládání čtení a zápisů - w1[x], r2[x], w1[y]
Nicméně – udržování MPG a zjišťování cyklů přináší velkou režii
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
212
1
2
3
Namísto abortování pozdržuje operace
Každá transakce Ti předem deklaruje objekty, se
kterými bude pracovat – r-data[Ti] a w-data[Ti]
Jakmile je Ti spuštěna, tak plánovač
4
5
6
7
Uloží množiny r-data[Ti] a w-data[Ti]
Vytvoří uzel Ti v MPG a přidá Tj Ti pro každou Tj v MPG
takovou, že p-data[Tj] q-data[Ti] pro všechny páry
konfliktních operací p a q
Což v podstatě znamená, že plánovač rozhodne, v
jakém pořadí mají být transakce zpracovány
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
213
1
r-data[T1] = {x, y, z}, w-data[T1] = {x, z}
r-data[T2] = {y, z}, w-data[T2] = {y, z}
r-data[T1] w-data[T2] = {y, z}
w-data[T1] r-data[T2] = {z}
3
4
5
6
7
T1
w-data[T1] w-data[T2] = {z}
2
T2
r-data[T3] = {x}, w-data[T3] = {x}
r-data[T1] w-data[T3] = {x}
w-data[T1] r-data[T3] = {z}
T3
w-data[T1] w-data[T3] = {x}
T2 a T3 nepracují se stejnými objekty
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
214
1
2
3
4
5
6
7
Pro každý objekt x pak queue[x] uchovává pozdržené operace na x
Konfliktní operace jsou uložené ve stejném pořadí jako hrany MPG
Pokud je v MPG Tj Ti pak je qj[x] blíž hlavě queue[x] než pi[x]
konfliktní s qj[x]
Nekonfliktní operace jsou uloženy v pořadí jejich obdržení (na nich
nezáleží)
pi[x] může být zasláno databázi pouze tehdy, když
Všechny operace konfliktní s pi[x] zaslané DB jsou potvrzeny
Pro každou Tj takovou, že Tj Ti MPG, a pro každou operaci q
konfliktní s p platí, buď x q-data[Tj] nebo qj[x] již byla přijata
plánovačem, jinými slovy, x q-plánováno[Tj]
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
215
1
2
3
4
5
První pravidlo zaručuje, že jsou konfliktní operace zpracovány v
pořadí, v jakém jsou naplánovány
Druhé pravidlo brání abortu kvůli operacím, které dorazí příliš
pozdě (způsobí cyklus)
6
7
Všechny operace Tj by měly být zpracovány před všemi konfliktními
operacemi z Ti aby se zabránilo cyklu v MPG, což je zaručeno
pozdržením pi[x]
K vyhodnocení této podmínky je potřeba udržovat q-plánováno[Tj]
Podtrženo a sečteno…
Pokaždé když dorazí pi[x] z monitoru nebo potvrzení(qj[x]) z DB,
plánovač zkontroluje, jestli je hlava queue[x] připravena
▪ Pokud je připravena, tak odebere operaci z fronty a zašle do DB
▪ Pokud není připravena, tak operaci ve frontě pozdrží
Způsob odebrání Ti z MPG je stejný jako v základním plánování PG
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
216
1
2
3
4
5
6
Základní a konzervativní plánování pomocí PG
vytváří uspořádatelné historie, které ale nejsou RC,
ACA a ST
Aby plánovač vytvářel striktní historie, tak může
použít stejnou techniku jako striktní TO
7
Nastavit w-nepotvrzeno[x] na 1 po zaslání wi[x] do DB
Nesnížit w-nepotvrzeno[x] po potvrzení wi[x] z DB, ale až
po potvrzení ai nebo ci z DB
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
217
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x] , w2[x], r1[y], w1[x], c1, …
Databáze
Konflikt??
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
218
1
2
3
4
5
6
7
Techniky plánování, které agresivně oddalují
testování korektnosti - optimistické plánování
Každá operace je ihned odeslána DB
Korektnost se testuje až při potvrzení
Certifikace může být založena na různých
algoritmech – 2PL, TO, PG certifikátory
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
219
1
3
4
5
6
7
Když plánovač obdrží operaci z monitoru, tak
2
Uloží operaci a objekt x na kterém byla provedena (vytváří si log)
Zašle operaci databázi, která ji okamžitě spustí
2PL certifikace sice nepoužívá zámky, ale chová se podobně v případě konfliktu
Když plánovač obdrží požadavek na potvrzení transakce, tak
Všechny operace provedené transakcí jsou ověřeny oproti všem konfliktním operacím
provedeným jinou aktivní transakcí na stejných datech
▪
▪
Pokud existuje konfliktní operace, tak je transakce zrušena
Pokud neexistuje konfliktní operace, tak je transakce potvrzena
Když plánovač obdrží ri[x]/wi[x], přidá x do r-plánováno[Ti]/w-plánováno [Ti].
Když plánovač obdrží ci, r-plánováno[Ti] a w-plánováno[Ti] obsahuje množinu
čtených a zapisovaných objektů transakcí Ti
Zpracování ci probíhá tak, že certifikátor ověří pro všechny aktivní Tj, zda-li
4/20/2015
r-plánováno[Ti] w-plánováno[Tj] =
w-plánováno[Ti] r-plánováno[Tj] =
w- plánováno[Ti] w-plánováno[Tj] =
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
220
1
2
3
4
5
6
7
Protože se neudržuje informace o pořadí prováděných operací, tak
se může stát, že certifikátor abortuje transakce, které by dokonce i
u 2PL úspěšně potvrdily
r2[x], r1[y], w1[y], w2[y], w2[x], c2, c1
K zajištění zotavitelnosti je potřeba, aby plánovač abortující
transakci Ti abortoval i všechny transakce Tj, které četly data z Ti
ACA a ST by se daly zajistit, ale jen pozdržováním operací, což jde
proti filosofii certifikování
Výkon závisí na počtu konfliktních operací
Pro malý počet funguje certifikátor stejně dobře, jako základní 2PL
plánovač, i když šetří hypotetické náklady na zamykání
Pro velký počet konliktních operací dochází přiliš často k abortům –
neefektivní opakování výpočtů
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
221
1
2
3
4
5
6
7
Když plánovač obdrží operaci z monitoru, tak
Si uloží danou operaci a objekt na kterém byla provedena
Zašle operaci databázi, která ji okamžitě spustí
Když plánovač obdrží požadavek ci na potvrzení transakce, tak jsou
Všechny operace provedené transakcí Ti zkontrolovány oproti všem
konfliktním operacím provedeným na stejných datech jinou aktivní transakcí
▪ Pokud konfliktní operace poruší pořadí dané časovými razítky, tak transakci zruší
▪ Pokud konfliktní operace dodrží pořadí dané časovými razítky, tak transakci potvrdí
Použité datové struktury jsou stejné, jako u základního TO plánovače
Certifikátor používá stejnou podmínku jako základní TO plánovač, ale
nechává doběhnout transakce, které mají abortovat. Proto je preferován
základní TO plánovač
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
222
1
2
3
4
5
6
7
Když plánovač obdrží operaci pi[x] z monitoru, tak
Přidá hrany odpovídající operaci pi[x] do MPG
Zašle operaci pi[x] databázi, která ji okamžitě spustí
Když plánovač obdrží požadavek na potvrzení transakce, tak
Zkontroluje MPG, jestli v něm není potvrzená transakce součástí nějakého
cyklu
▪ Pokud je součástí cyklu, tak je transakce zrušena
▪ Pokud není součástí cyklu, tak je transakce potvrzena
Použité datové struktury jsou stejné, jako u základního PG plánovače
Zůstávají stejné problémy s neefektivním využitím místa, takže je
potřeba stejných opatření, redukujících velikost MPG
K zajištění zotavitelnosti je potřeba, aby plánovač abortující transakci Ti
abortoval i všechny transakce Tj, které četly data z Ti
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
223
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x], r1[y], w1[x], c1, w2[x], …
Databáze
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
224
1
2
3
4
5
6
7
Dekomponují problém plánování na
Plánování r[x] oproti w[x] a w[x] oproti r[x] (RW_WR)
Plánování w[x] oproti w[x] (WW)
Každý problém řeší jinou metodou a pak zkombinují
výsledky (pozor - kombinace musí být korektní!)
Lze použít 2PL, TO, PG plánovače
Pure (2PL+2PL, …) vs. mixed integrované plánování
Proč to vlastně komplikovat integrováním?
Předpokládáme, že kombinace rozšíří množinu historií
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
225
1
2
3
4
5
6
Uvažujme TO plánovač, který obdrží wi[x] po wj[x], které již bylo zasláno DB a
přitom ts(Ti) < ts(Tj)
TO plánovač by wi[x] zamítl (operace přišla pozdě)
Pokud ale plánovač řeší WW konfliktní dvojice zvlášť, tak je zamítnutí zbytečné, protože
kdyby wi[x] přišlo před wj[x] jak mělo, bylo by ve výsledku v DB stejně jen wj[x]
Pomocí Thomas Write pravidla (TWR) může WW TO plánovač potichu ignorovat
opožděné zápisy, zatímco pro RW_WR může používat základní TO
Integrovaný plánovač TO/TWR by tedy vypadal takto
7
Plánovač zamítne ri[x] tehdy, když již bylo wj[x] plánováno a ts(Ti) < ts(Tj)
Jinak plánuje ri[x]
Plánovač zamítne wi[x] tehdy, když již bylo rj[x] plánováno a ts(Ti) < ts(Tj)
Plánovač ignoruje wi[x] tehdy, když již bylo wj[x] plánováno a ts(Ti) < ts(Tj)
Jinak plánuje wi[x]
Pozdní zápis je zamítnut pouze tehdy, když již bylo plánováno konfliktní čtení
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
226
1
3
4
5
6
7
Použití striktního 2PL pro RW_WR konfliktní dvojice a TWR pro WW konfliktní
dvojice - zde je kombinace již složitější, protože
2
Plánovače garantují acyklický PGrw(H) a PGww(H)
Acyklické ale musí být i jejich sjednocení !!!
Aby byl PG(H) acyklický, tak je potřeba zajistit, aby bylo ts(Ti) < ts(Tj) pro každou
hranu z Ti do Tj v PGrw(H) (to je již dostačující podmínka, protože v PGww(H) to již
platí)
Pokud existuje hrana z Ti do Tj, pak Tj nemůže skončit před Ti, protože Ti drží zámky, které
bude Tj potřebovat
To znamená, že Ti potvrdí před Tj (zrušení neřešíme - nejsou v PG)
Je tedy dostačující, abychom zajistili, že pro každé dvě transakce platí – pokud Ti potvrdí před
Tj pak, ts(Ti) < ts(Tj)
Jednoduché řešení – přiřadit transakcím časová razítka ve chvíli, kdy potvrdí
(namísto jejich startu)
TWR ale potřebuje pro rozhodování časová razítka – plánování zápisů je pak
odloženo až do chvíle potvrzení (problém se čtením vlastních dat – můžou se pak
lokálně číst opožděné zápisy z fronty plánovaných operací write)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
227
1
2
3
4
5
6
O plánování běhu transakcí se stará rozvrhovač transakcí (scheduler),
který se snaží dosáhnout izolace transakcí pomocí vhodného protokolu
Jaké má plánovač možnosti plánování?
7
Obecně – provést operaci ihned, pozdržet nebo odmítnout
Agresivní plánovač – snaha vykonat operace rychle – okamžitě nebo vůbec
Konzervativní plánovač – předcházení odmítání – zpožďování
Existuje více strategií, jak zajistit izolaci transakcí
Zamykání objektů
Časová razítka
Pomocí precedenčního grafu
Certifikace
Integrované plánovače
Multiversion data
TP Monitor
r2[y], r1[x], w2[x], r1[y], w1[x], c1, …
Plánovač
r2[y], r1[x], r1[y], w1[x], c1, w2[x], …
Databáze
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
228
1
2
3
4
5
Doteď jsme uvažovali, že každá operace wi[x] přepíše
hodnotu objektu x v databázi a tímpádem se k původní
hodnotě jiné (dříve) spuštěné transakce již nedostanou
Nový přístup – wi[xi] vytvoří novou verzi xi
6
7
Řeší problém s operacemi, které dorazí pozdě
Plánovač navíc nemusí řešit w/w dvojice – přestávají být
konfliktní – nejsou nad stejnou proměnnou
S tím jsou ale spojené nové problémy
Plánovač musí doplnit operaci čtení o informaci, jakou verzi číst
(od toho by měl být uživatel odstíněn)
Ukládání všech verzí zvětší velikost databáze …
… ale stejně by se verze ukládaly kvůli zotavení
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
229
1
2
3
Pro analýzu korektnosti historií nad MV daty je
potřeba rozšířit teorii uspořádatelnosti
Rozšíření vyžaduje dva nové typy historií
4
5
6
7
MV historie – reprezentuje výpočet na MV DB
1V historie – reprezentuje interpretaci MV historie z
„jednoverzového“ pohledu uživatele, MV DB je jen nástroj
pro izolaci, měla by být tudíž skrytá uživateli
Jak tedy chápat korektnost?
Korektní je určitě sériová 1V historie
Je tedy potřeba dokázat, že každá produkovaná MV
historie je ekvivalentní nějaké 1V sériové historii
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
230
1
2
3
4
5
6
7
MV historie je podobná jednoverzové, až na
wi[x] nové transakce Ti vždy vytvoří novou verzi značenou wi[xi]
ri[x] transakce Ti vždy specifikuje, jakou verzi číst, značeno ri[xj]
Kompletní MV historie (CMV) je MV historie, kde
Každé ri[xj] je předcházeno wj[xj] – čtení existující verze
Každé ri[x] po wi[xi] je ri[xi] – čtení poslední verze v rámci Ti
Každá operace ci po ri[xj] je předcházena operací cj – zotavitelnost
Proč se zahrnuje zotavitelnost do CMV historie?
Potřebujeme, aby Commit projekce C(H) byla CMV, tj. nechceme
čtení nepotvrzených (abortovatelných) verzí dat
Zotavitelnost to zajišťuje
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
231
1
2
3
4
5
Opět nás zajímá taková MV historie, která je „nějak“ ekvivalentní nějaké 1V
sériové historii
Problém – tradiční (a jednoduchá) konfliktová ekvivalence nestačí
6
7
H1 = w1[x1]c1 w2[x2]c2 r3[x1]w3[y3]c3 jiný pohled na konfliktní dvojice pro x a y
H2 = w1[x] c1 w2[x] c2 r3[x] w3[y] c3 z pohledu uživatele totiž verze nejsou
Pouze w1[x1] a r3[x1] tvoří konfliktní dvojici H1 (jiná verze = jiná proměnná!)
Pořadí w1[x] a r3[x] je přitom stejné jako v 1V sériové H2
Ale r3 v H1 čte jinou hodnotu x než r3 v H2 – tj. stejné konfliktní dvojice nestačí
Proto se musí použít pohledová ekvivalence (rozlišuje odkud se čte)
Budou nás zajímat „one copy“ sériové MV historie (1SMV), kde 1SMV je historie,
která je pohledově ekvivalentní nějaké 1V sériové historii
Problém – nelze přímo porovnávat MV a 1V historie
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
232
1
2
3
4
5
6
7
Pohledově ekvivalentní MV historie
Obsahují stejné operace
Čtou stejné verze dat
U pohledové ekvivalence v 1V historii jsou ještě potřeba
stejné finální zápisy, ale v MV jsou vlastně všechny finální
Specifikováním verze čtených dat v MV historii se redukuje
problém ekvivalence MV historií na triviální požadavek , a to,
že ekvivalentní MV historie mají stejné operace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
233
1
2
3
4
5
6
7
CMV historie je sériová (SMV) když pro každé dvě transakce Ti a Tj platí, buď že
všechny operace Ti předchází všechny operace Tj nebo naopak
Pozor - né všechny MV historie se chovají jako sériové 1V historie!
H1: w1[x1] w1[y1] c1 r2[x1] r2[y1] w2[x2] w2[y2] c2 r3[x1] r3[y2] c3
SMV historie je „one copy“ sériová historie (1SMV) když pro každé i, j a x platí,
když Ti čte x z Tj, pak buď i=j nebo Tj je poslední transakce před Ti která zapsala
verzi x. H1 není 1SMV kvůli r3[x1], a přitom w1[x1] již bylo přepsáno w2[x2]
Intuitivně, 1SMV je ekvivalentní nějaké sériové 1V historii (každá aktivní transakce
pracuje jen s poslední verzí proměnné, což je dost silné omezení)
A teď už stejně jako u 1V uspořádatelnosti – MV historie je „one copy“
uspořádatelná historie (1SR), jestliže je její Commit projekce ekvivalentní nějaké
1SMV historii
Co se stalo s požadavkem “pro libovolný prefix” z VSR ?
4/20/2015
Není potřeba pro MV historie
Vlastnost 1SR již je prefix commit closed
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
234
1
2
3
4
5
6
7
Konstrukce podobná jako u jednoduchého PG
Uzly tvoří transakce
Hrany značí uspořádání konfliktních dvojic
▪ Konfliktní dvojice, které již nevzniknou – wi[xi] < wj[xi] a rj[xi] < wi[xi]
▪ Zůstává tedy pouze jeden typ konfliktní dvojice (wi[xi] < rj[xi])
▪ Tento konflikt popisuje, že Tj čte hodnotu x zapsanou Ti
Čtení stejných dat je ale přesně principem pohledové
ekvivalence – proto pokud Hi = Hj pak MVPG(Hi) =
MVPG(Hj).
Tento graf ale pořád ještě není vhodný pro detekci
1SR, kde chceme, aby rk[x] četlo vždy poslední verzi x
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
235
1
2
3
4
5
6
7
Přidají se nové hrany, které tvoří uspořádání mezi verzemi
Pro všechny páry wi[xi] a rk[xj]
▪ Přidá se hrana z Ti do Tj pokud i < j
▪ Přidá se hrana z Tk do Ti pokud j < i
w1 [x1]
r2 [x2]
r3 [x1]
w2 [x2]
H1: w1[x1] w1[y1] c1 r2[x1] r2[y1] w2[x2] w2[y2] c2 r3[x1] r3[y2] c3
Uvažujme tvorbu tohoto grafu z pohledu 1V historie
Obě hrany společně garantují, že rk bude číst z wj (jinak cyklus v MVPG)
První typ hrany brání posunu wi za proběhlou wj
Druhý typ hrany brání posunu wi před proběhlou rk
w2 [x]
w1 [x]
r2 [x]
w2 [x]
r3 [x]
w2 [x]
MV historie je 1SR právě tehdy, když je její modifikovaný MVPG
acyklický
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
236
1
2
3
4
5
6
7
H1: w1[x1] w1[y1] w2[y2] c2 r3[y2] w3[z3] c3 r1[z3] c1
Modifikovaná verze PG
Pro všechny páry wi[xi] a rk[xj]
Přidá se hrana z Ti do Tj pokud i < j
Přidá se hrana z Tk do Ti pokud j < i
T1
T2
T1
T2
y2
z3
y2
z3
T3
4/20/2015
y2
T3
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
237
1
2
3
4
5
6
7
H1: w1[x1] w1[y1] c1 r2[x1] r2[y1] w2[x2] w2[y2] c2 r3[x1] r3[y2] c3
Modifikovaná verze PG
Pro všechny páry wi[xi] a rk[xj]
Přidá se hrana z Ti do Tj pokud i < j
Přidá se hrana z Tk do Ti pokud j < i
x1, y1
T1
x1 , y 1
T2
x1
y2
T1
x1
x1, y2
T3
4/20/2015
T2
y2
T3
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
238
1
2
3
4
5
6
7
MV TO Plánovač pracuje následovně
Každá operace je naplánována okamžitě
Každé čtení ri[x] je přeloženo na ri[xj] kde j je nejvyšší dostupné časové razítko pro x
které je menší rovno i
Každý zápis wi[x] je přeložen na wi[xi] kde i je časové razítko transakce
▪ Pokud již proběhlo čtení rj[xk] takové, že ts(Tk) < ts(Ti) < ts(Tj), tak zápis zamítne
▪ Pokud takové čtení neexistuje, tak zápis projde
Jak zjistit časové razítko při ri[x], případně jak detekovat konflikt u wi[x]
Pro každou verzi xi se udržují časová razítka [wts, rts], wts = ts(Ti) a rts je max ts čtení
Při ri[x] hledá pro všechna razítka x takové wts, že wts ≤ ts(Ti), aktualizuje rts
Při wi[x] hledá max wts takové, že wts < ts(Ti) a zjišťuje, jestli rts > ts(Ti)
▪ Pokud podmínka platí, tak odmítne wi[x]
▪ Jinak zašle wi[x] do DB a vytvoří novou dvojici časových razítek wts = rts = ts(Ti)
Pro zotavitelnost – ci je pozdrženo do operace cj pro všechny Tj které
zapsaly verzi čtenou Ti
▪ Verze jsou průběžně promazávány, takže čtení příliš starých dat může být zamítnuto
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
239
1
2
3
4
5
6
7
V klasickém 2PL, w[x] brání získání r[x], čemuž se dá vyhnout
udržováním dvou verzí x – 2V 2PL
Když Ti zapisuje do x, tak vytvoří novou verzi xi objektu x a nastaví zámek
bránící jiným Tj ve čtení xi nebo vytvoření nové verze x
Nicméně, jiné transakce Tj mohou číst a pracovat s původní verzí x, její
zápis je pak ale odložen
Jakmile transakce měnící x potvrdí, tak se předchozí dostupná verze x
znepřístupní
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
240
1
2
3
4
5
6
7
MV 2PL plánovač pracuje následovně
Každé čtení vyžaduje zámek na čtení pro čtenou položku
Každý zápis vyžaduje zámek na zápis pro zapisovanou položku
Zámek pro zápis brání
▪ Čtení položky, ne však jejich předchozích verzí
▪ Vytvoření nové verze položky
Toto schéma vyžaduje udržování pouze dvou verzí objektu, tzv.
certifikační zámky použité při potvrzení a upravenou tabulku
konfliktních zámků
Uzel již zamčen jako…
Chceme
Lehce flexibilnější varianta 2PL plánovače
Čtení nejen nejaktuálnějších verzí položek
Které ale může vést na kaskádové aborty
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
rl
wl
cl
rl
Ano
Ano
Ne
wl
Ano
Ne
Ne
cl
Ne
Ne
Ne
241
1
2
3
4
5
7
2V 2PL plánovač používá tyto zámky (viz. tabulka na předchozím slajdu)
Zámek na čtení, který koliduje s certifikačním zámkem (ale ne se zámkem na čtení a zápis)
Zámek na zápis který koliduje se zámky pro zápis a cerifikaci (ale ne se zámkem pro čtení)
Certifikační zámek který koliduje se všemi zámky
Když dorazí požadavek na zápis wi[x], tak se plánovač pokusí nastavit wli[x].
Jakmile je tento zámek nastaven, tak je zápis upraven na wi[xi] a plánován
Když dorazí požadavek na čtení ri[x], tak se plánovač pokusí nastavit rli[x].
Jakmile je zámek nastaven, tak
6
Pokud Ti již vlastní wli[x], tak je čtení upraveno na ri[xi] a plánováno
Jinak je čtení upraveno na ri[xj], kde xj je poslední potvrzená verze x, a pak plánováno
Pokud dorazí požadavek na potvrzení ci, tak se plánovač pokusí změnit všechny
zámky na zápis wli[x] na certifikační zámky cli[x]. To způsobí, že plánovač pozdrží
potvrzení do doby, dokud nejsou uvolněny všechny zámky pro čtení dat, které se
Ti chystá přepsat
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
242
1
2
3
4
5
6
7
Co ještě dodat k 2V2PL?
Konverze zámků může vést k uváznutí
Čtena pouze potvrzená data, tj. 2V2PL zabraňuje
kaskádovým abortům
Může být dále zobecněno
Odebrání zámků pro zápis umožňuje více verzí
Certifikace musí čekat ještě na verze čtení, aby byla sama
certifikovaná
Podtrženo, sečteno – MV data dávají plánovači větší
možnosti při plánování čtení. Pokud je předem
známo, že transakce pouze čte, dá se toho využít
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
243
1
2
3
4
5
6
Rozděluje transakce na read only dotazy ROQ a read
write aktualizace RWU a plánuje je zvlášť – vede na
lepší prokládání operací
Používá MV TO pro ROQ a striktní 2PL pro RWU
7
Všechny RWU používají striktní 2PL a při potvrzení jim je
přiřazeno časové razítko, každý zápis vytvoří novou verzi
Všem ROQ je přiřazeno časové razítko starší než razítko
kteréhokoliv aktivního RWU. Všechna čtení ROQ používají
verzi s nejbližším starším časovým razítkem
Důsledek, ROQ čtou pouze potvrzená data a navíc
čtená data nemusí zamykat (nebrzdí tak RWU)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
244
1
2
3
4
5
6
Udržovat časová razítka přiřazená při potvrzení může být
nákladné (časové razítko pro w[x] je dostupné až při
potvrzení, takže je potřeba měněné objekty při potvrzení
znovu načíst, označit časovým razítkem a zase zapsat)
Namísto toho se používá tzv. Commit list
7
Seznam identifikátorů potvrzených transakcí
Každý ROQ je přiřazen ke Commit listu všech RWU které
potvrdily v čase kdy ROQ začal
Čtení v ROQ používají nejaktuálnější verze potvrzené nějakým
RWU z komit listu
Commit list musí být uložen velmi efektivně a musí být
ořezáván od příliš starých položek
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
245
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
246
1
2
3
4
5
6
7
Některým chybám lze těžko zabránit
Chyba v kódu – porušení konzistence – lepší metodika návrhu a
validace SW
Chyba operátora/technika – školení, zálohování
Přírodní katastrofa, atd.
Techniky zotavení alespoň řeší důsledky těchto chyb a
následné navrácení DB do konzistentního stavu
Kde může dojít k chybě/selhání systému
4/20/2015
Transakce – (abort, uváznutí, …) DB v nekonzistentním stavu
Systém – (pád systému, …) ztráta informací z dočasné paměti
Úložiště – (proud, selže pevný disk, …) ztráta trvalé paměti
Síť – (spojení, …) týká se distribuovaných systémů
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
247
1
Závisí na způsobu ukládání změn do DB
Přepisování původních dat v DB (in-place)
2
3
4
5
6
7
Informace o změnách pak uchovány v logu
Využívá se buffer (jak data tak log)
Vytváření „nových“ verzí dat (out-of-place)
Shadowing – dvě verze diskových stránek pro novou a původní
verzi záznamu (systém R)
Differential files
▪ DB je readonly, udržují se k ní dva soubory s novými I a smazanými D
záznamy (update = delete + insert)
▪ Skutečný stav DB je pohled (DB + I) – D
▪ I a D jsou periodicky promítány do DB
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
248
1
2
3
4
5
6
7
TP manažer je komponenta TP monitoru, která má na starosti
Řízení potvrzení a zrušení transakce
Zotavení úložiště
Restart manažera zdrojů a systémový restart
Definuje dvě základní rozhraní - pro aplikace a pro manažera
zdrojů
Koncepty transakčního manažera
DO-UNDO-REDO protokol
Různé modality logování
FIX, WAL, Force-log-at-commit
Využívá služby log manažera
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
249
1
Aplikační rozhraní definuje
obvykle následující funkce, které
používají aplikace a které mají
jasnou sémantiku:
begin_work, commit_work,
4/20/2015
abort_work (normální primitiva
pro zahájení a ukončení transakce)
save_work, rollback_work,
chain_work (speciální primitiva pro
zahájení a ukončení transakce),
prepare_work (pro dvoufázový
commit)
read_context,
get_transaction_status, my_trid
(získávání stavových informací),
leave_transaction,
resume_transaction (pro
suspendování a probuzení
transakce)
2
3
4
5
6
7
Rozhraní manažera zdrojů je
rozhraní, které vyžaduje (ve
formě pointrů na callback
funkce) transakční manažer po
manažerech zdrojů zapojených
do transakce:
prepare, commit, abort,
savepoint(LSN),
undo_savepoint(LSN),
redo_savepoint(LSN),
undo, redo,
TM_startup,
Checkpoint
LSN je tzv. log sequence
number, tj., jednoznačný
identifikátor záznamu v logu
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
250
1
2
3
4
5
6
7
DO – operace provádí něco s objektem a
zaznamenává to do logu
UNDO – změněný objekt je možné vrátit pomocí
logu do podoby před provedením DO
REDO – původní objekt je možné vrátit pomocí
logu do podoby po provedení DO
Někdy může být problém, např. Resend, Posuň o x°
Idempotence – f(f(x)) = f(x), např. Posuň na [x, y]
Je možné též testovat, zda-li již byla akce provedena
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
251
1
2
3
4
5
6
7
Fyzický log
Zaznamenává informaci o staré a nové hodnotě jednoho záznamu
Nevýhodou je velikost logu – všechny změny objektů, indexů, atp…
Logický log
Orientace na operace, tj., co a s jakými parametry bylo provedeno
Jeden záznam v logu pokryje spousty záznamů ve fyzickém logu
Fyzicko-logický log
Transakce se rozdělí na mini transakce, kde každá mini transakce
používá fyzické logy a exkluzivní zámky
Celá transakce pak používá logický log
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
252
1
2
3
4
5
6
7
Další obecné zásady pro práci s logem
FIX (fixing the page) – čtení a zápisy na fyzické
úrovni musí být vždy pokryty semaforem na
úrovni stránky, dokud není vše zapsáno v logu
WAL (write ahead logging) – do logu by se mělo
zapsat vždy dříve, než se provede a uloží samotná
změna objektu do perzistentní paměti
Force-log-at-commit – při commitu je log vždy
uložen do perzistentní paměti
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
253
1
2
3
4
5
6
Log manažer se stará o zaznamenávání všech
provedených operací do logu
Funkce logu proto musí být velice rychlé (hodně
prováděných operací) a musí podporovat konkurentní
zpracování požadavků
Jaké operace umožní log? Informace z logu potřebné pro
7
Rollback transakce – rekonstrukce původních hodnot
Commit/Undo/Redo při restartu po havárii systému
A proč to teda bez nějaké formy logu nejde? Z důvodu
optimalizace systémů se často využívají různé typy
bufferů, které uchovávají data dočasně pouze v RAM
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
254
1
2
3
4
5
6
7
Datové záznamy jsou na HDD obvykle organizovány ve
stránkách o pevné velikosti
Disk využívá „pomalé“ čtecí hlavy a rotační plotny
Nejdražší operací je přesun hlavy na určitou pozici (seek)
Data je potřeba přizpůsobit tomuto mechanismu (alespoň do
doby, dokud nebudou použitelné SSD disky s rychlým seekem)
U HDD je sekvenční přístup velice efektivní
Stránky představují sekvenční bloky (načíst sekvenčně 1 nebo
1000 malých záznamů trvá téměř stejně dlouho)
Stránky přitom mají rozumnou velikost, tj., pro skupinu
požadovaných záznamů se nečte do RAM velká část DB
Pokud jsou navíc data organizována tak, že žádaná data jsou u
sebe v jedné stránce (tvoří shluky), pak „není co řešit“
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
255
1
Učebnicový příklad pro nutnost logování operací v SŘBD
Buffer je kus hlavní paměti pro dočasné uchování diskových
stránek, diskové stránky se mapují do rámců v paměti 1:1
3
4
5
6
7
Manažer dat
Každý rámec má 2 příznaky
2
pin_count - počet referencí na stránku v rámci
dirty - příznaky modifikace záznamů
Slouží k urychlení opakovaného přístupu ke stránkám správce bufferu implementuje operace read, write a řeší
výpadky stránek
RAM
Červená buňka v obrázku představuje rámec obsahující
záznam, který byl upraven, ale ještě nebyl zapsán na pevný
disk
Co když jsou po potvrzení ACID transakce v bufferu „červené
buňky“ a TP systém havaruje? Navíc může systém používat i
jiné buffery – např. buffer pro odesílané zprávy.
Pevný disk
Proto je potřeba tzv. transakční log
Aktuální stav DB
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
256
1
2
3
4
5
6
7
Datové položky se nezapisují přímo na disk (viz.
operace write) a záznamy logu se nezapisují okamžitě
do stabilní paměti
Nicméně, je potřeba dodržovat určité zásady práce
Transakce Ti se dostává do stavu potvrzení teprve až po
uložení záznamu <Ti, commit > do stabilní paměti
Před záznamem <Ti, commit > musí být do stabilní paměti
uloženy všechny záznamy žurnálu týkající se transakce Ti
(aby bylo možné garantovat zotavitelnost)
Před uložením bloku dat do databáze musí být uloženy
všechny záznamy žurnálu, týkající se daného bloku (tzv.
pravidlo WAL (write-ahead logging))
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
257
1
2
3
4
5
6
7
Typ vztahu manažera zotavení a buffer manažera má
vliv na implementaci a složitost zotavení
Může buffer manažer zapisovat stránky na disk v
průběhu zpracování transakce (no-FIX/steal) nebo
čeká na příkaz od manažera zotavení (FIX/no-steal)?
Bude se zapisovat na disk až s potvrzením (noflush/no-force) nebo i v průběhu zpracování transakce
(flush/force)?
Jsou možné všechny kombinace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
258
1
2
3
4
5
6
Znám jako redo/undo algoritmus z Bernsteina
Potvrzení transakce – zapíše se do logu pouze
informace o potvrzení, zašle plánovači zprávu o
potvrzení
Zrušení transakce - buffer manažer mohl zapisovat
kdykoliv, je potřeba dělat UNDO transakce, nakonec
zašle plánovači zprávu o úspěšném zrušení transakce
Zotavení – částečné REDO a globální UNDO od
začátku logu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
259
1
2
3
4
5
6
7
Znám jako undo/no-redo algoritmus z Bernsteina
Potvrzení transakce – buffer manažer dostane příkaz
zapsat všechny změněné stránky na disk, zapíše se do
logu informace o potvrzení, zašle plánovači zprávu o
potvrzení
Zrušení transakce - buffer manažer mohl zapisovat
kdykoliv, je potřeba dělat UNDO transakce, nakonec
zašle plánovači zprávu o úspěšném zrušení transakce
Zotavení – pouze globální UNDO
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
260
1
2
3
4
5
6
7
Znám jako redo/no-undo algoritmus z Bernsteina
Buffer manažer nepoužívá příkaz fetch ale příkaz fix
Potvrzení transakce – zapíše se do logu pouze informace o
potvrzení a odemknou se používané stránky příkazem
unfix, zašle plánovači zprávu o potvrzení
Zrušení transakce – je potřeba pouze odemknout
používané stránky příkazem unfix, zapíše se do logu
informace o zrušení transakce, zašle plánovači zprávu o
úspěšném zrušení transakce
Zotavení – pouze částečné REDO
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
261
1
2
3
4
5
6
Znám jako no-undo/no-redo algoritmus z Bernsteina
Buffer manažer nepoužívá příkaz fetch ale příkaz fix
Potvrzení transakce – odemknou se používané stránky příkazem
unfix a buffer manažer dostane příkaz zapsat všechny změněné
stránky na disk, zapíše se do logu informace o potvrzení a zašle
plánovači zprávu o potvrzení. Je potřeba provést atomicky!
Zrušení transakce – je potřeba pouze odemknout používané
stránky příkazem unfix, zapíše se do logu informace o zrušení
transakce, zašle plánovači zprávu o úspěšném zrušení transakce
Zotavení – není třeba dělat nic
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
7
262
1
3
4
5
6
7
Log by mohl být i SQL tabulka, operace nad logem jsou však specifické
2
Log je hodně velký, navíc neustále roste (stará data mohou být „offline“)
Drtivá většina operací je zápis na konec logu (ale po stránkách)
Občas potřeba číst, ale jen konec logu (fáze zotavení)
Log může být lokální nebo distribuovaný
Logovací tabulky
Dávkové transakce mívají více úrovní logů – hlavní log není zbytečně blokován
Samotný log je často sekvenční soubor, ke kterému existuje katalog v SQL
Proč je potřeba log manažer?
Netriviální logika při nabíhání systému
Bezpečné protokoly zápisu dat – např. duplikace záznamů
Session-based komunikace (hlavičky při přihlášení k logu a pak už jen zprávy –
efektivita)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
263
1
2
3
4
5
6
7
K logu nelze přistupovat libovolně – práva k objektům musí platit i
pro záznamy v logu
Komunikace i se security manažerem
Potřeba speciální log authority – prevence před neustálým dotazováním
security manažera
Dva různé přístupy k rozhraní
Record-at-time – přímý přístup k souboru, čtení jen hlavičky nebo části
potenciálně velkého záznamu
Set-oriented – obdoba SQL dotazů
Další zásady
Neexistuje přímý přístup do logu
Nelze inkrementálně zapisovat jeden velký záznam (problém s
restartem)
Minimalizace datových přesunů mezi komponentami
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
264
1
2
3
4
5
6
Log není měněn, tj. stačí hlídat (zamykat) jen zápis dat na konec
logu
Opatrný zápis – pokud se ukládá neúplná stránka do logu,
přepisuje předchozí verzi této stránky a dojde k pádu systému –
pak je poslední stránka nekonzistentní
7
Dvojitý zápis na dvě stránky za sebou, vyplatí se zapisovat rovnou celé
stránky
Ping-pong – střídání zápisu na i a i+1 stránku, při zotavení se přečtou
poslední dvě stránky a podle časového razítka se pozná, která je
novější a tudíž platná
Pokud je potřeba minimální latence zápisu do logu, tak se dá
problém řešit i speciálním driverem a algoritmem write-ahead
data set (WADS) = dedikovaný cilindr jen pro zápisy do logu, jak se
zaplní, tak se přesune do skutečného logu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
265
1
3
4
5
6
7
Zjednodušeně je log posloupnost všech modifikací databáze
zaznamenaných ve formě (bez společných polí)
2
<Ti, start> Ti zahájila provádění
<Ti, update, H=(PageId, Length, Offset), Hold, Hnew> Ti zapsala položku H
<Ti, commit> Ti potvrdila změny
<Ti, abort> Ti byla zrušena
<Ti, undo, H=(PageId, Length, Offset), Hnew, Hold> Ti vrátila položku H
Různé strategie zápisu do logu a DB
4/20/2015
Odložená modifikace DB
Okamžitá modifikace DB
Kontrolní body
Správa vyrovnávací paměti
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
266
1
2
3
4
5
6
7
Modifikace jdou pouze do žurnálu, zápis do DB až s potvrzením
Výhoda – zotavení pak používá pouze funkci REDO
Ti
Operace
Log
Databáze
T0:
Read(x, @x)
<T0, start>
x = 100, y = 200
Zotavení
@x = @x*1,1
Write(x, @x)
<T0, x, 100, 110>
Read(y, @y)
@y = @y*1,1
Write(y, @y)
T1:
4/20/2015
Read(x, @x)
<T0, x, 200, 220>
<T0, commit> = write
x = 110, y = 220
<T1, start>
x = 110, y = 220
Redo(T0)
@x = @x - 20
Redo(T0)
…
…
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
267
1
Nepotvrzené modifikace jdou rovnou i do DB
Zotavení pak používá funkci REDO i UNDO
Ti
Operace
Log
Databáze
Zotavení
T0:
Read(x, @x)
<T0, start>
x = 100, y = 200
Undo(T0)
@x = @x*1,1
Write(x, @x)
T1:
4/20/2015
<T0, x, 100, 110>
x = 110, y = 200
4
5
6
7
Undo(T0)
Undo(T0)
@y = @y*1,1
Undo(T0)
Read(x, @x)
3
Undo(T0)
Read(y, @y)
Write(y, @y)
2
<T0, x, 200, 220>
Undo(T0)
<T0, commit>
x = 110, y = 220
Redo(T0) Undo(T1)
<T1, start>
x = 110, y = 220
Redo(T0) Undo(T1)
@x = @x - 20
Redo(T0) Undo(T1)
…
…
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
268
1
2
3
4
Kontrolní bod (checkpoint) je technika periodického ukládání obsahu
vyrovnávacích pamětí na disk
Vede ke snížení režie zotavení po výpadku a řídí se následujícím postupem
5
6
7
Uloží se všech záznamy logu z hlavní paměti (ano i ten může mít buffer)
Uloží se všechny modifikované bloky DB z vyrovnávací paměti na disk
Uložení záznamu <checkpoint, T1, T2, ... > na disk
Zotavení pak probíhá následovně
Nalezne se množina transakcí T, které probíhaly nebo byly zahájeny po posledním
kontrolním bodu
Aplikuje se zotavovací procedury redo(Ti) a undo(Ti) na každou transakci Ti z T podle
použité techniky
4/20/2015
T1
T2
redo
redo
T3
undo
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
269
1
2
3
4
5
6
7
TP manažer zajišťuje restart v případu pádu systému
Hotstart – restart za chodu systému
Warmstart – start za použití perzistentní paměti
Coldstart – start z archivu
Zopakujme důvody pro restart
Pád systému – je ztracen obsah RAM, perzistentní paměť je
zachována – tj. je možné provést REDO a UNDO na příslušné
transakce
Poškození média – je potřeba duplikovat data (RAIDy)
Abort transakce – např. v případě uváznutí – UNDO a restart transakce
Předpokládáme okamžitou modifikaci DB, ke všem operacím
existuje UNDO operace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
270
1
3
4
5
6
7
Stavy transakce vzhledem k 2PC
2
Completed – po druhé fázi 2PC protokolu, každý RM je už o potvrzení informován
Completing – po první fázi 2PC protokolu, někteří RM ještě nedostali potvrzení o finálním
potvrzení (tedy uprostřed druhé fáze)
Persistent – v první fázi 2PC nebo v persistentním savepointu (nelze provést potvrzení ani abort)
Active – uprostřed práce (pak dělá i UNDO)
Stavy transakce podle toho, kdy začaly a kdy skončily
4/20/2015
Transakce začala i skončila před posledním checkpointem – není co řešit…
T1 - transakce začala před posledním checkpointem, ale skončila dříve, než nastal pád systému.
Zde je potřeba provést znovu ztracené operace mezi checkpointem a potvrzením
T2 - transakce začala po posledním checkpointu, ale skončila dříve, než nastal pád systému. Zde
je potřeba provést znovu operace mezi checkpointem a potvrzením
T3 - transakce začala po posledním checkpointu a byla aktivní v době pádu systému. Je potřeba
provést UNDO
T4 - transakce začala před posledním checkpointem a byla aktivní v době pádu systému – je
T4
potřeba provést UNDO
T1
T2
redo
redo
T3
undo
undo
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
271
1
2
3
4
5
6
7
Low-water-mark je identifikátor záznamu logu, odkud se musí provést REDO
Manažer zotavení používá dva seznamy: UNDO list, který iniciálně obsahuje
všechny aktivní transakce v době posledního checkpointu (jejich seznam je
uložen v logu), a REDO list, který je na počátku prázdný
Prohledává se od low-water mark po konec logu. Pokud se najde BEGIN WORK
nějaké transakce, přidá se tato transakce do UNDO seznamu. Když se najde
COMMIT WORK nějaké transakce z UNDO seznamu, tak se tato transakce
přesune z UNDO seznamu do REDO seznamu. Tímto prvním "REDO" čtením se
dostane transakční manažer do stavu, ve kterém se nacházel v okamžiku pádu
systému
Pak se prohledává zpátky od konce logu po low-water mark a provádí se UNDO
transakcí z UNDO seznamu
Nakonec se prochází znovu od low-water mark po konec logu a provede se REDO
všech transakcí z REDO seznamu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
272
1
2
3
4
5
6
7
Algoritmus navržen pro přístup no-fix/no-flush
Fix/flush je sice triviální, ale má špatnou propustnost
No-flush se týká jen db stránek, ne logu!
Využívá mnoho optimalizací pro větší efektivitu
Zotavení probíhá ve třech fázích
Analýza – zjišťování „dirty pages“ a aktivních transakcí v době pádu
REDO – zopakování všech akcí od posledního checkpointu
UNDO – zrušení akcí transakcí které nestihly potvrdit
Hlavní principy ARIES
WAL a opakování historie (REDO)
Logování změn během UNDO (neopakování undo operací během
opakovaného pádu systému)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
273
1
2
3
4
5
6
7
Log sequence number (LSN) – id záznamu
Rostoucí posloupnost, index do souboru (pro ARIES)
Každá stránka v DB obsahuje LSN log záznamu nejnovější
operace s danou stránkou (pageLSN)
Log záznam je vytvořen pro operace – update,
commit, abort, end, undoing update
Každý záznam v logu má následující položky
prevLSN – předchozí záznam transakce
transID – id transakce
Typ operace
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
274
1
2
3
4
5
6
7
Kompenzační záznam (CLR)
Zapsán do logu předtím, než je provedena operace UNDO
záznamu ZId
Obsahuje undoNextLSN (=prevLSN ZId), které
představuje Id následujícího záznamu, pro které se bude
volat UNDO
Popisuje akci, na které nebude nikdy voláno UNDO
(neodvolatelnost abortu)
Důsledek – je znám max počet CLR záznamů
Opět princip WAL, je možné volat REDO na CLR při
pádu během zotavení
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
275
1
2
3
4
5
6
7
Tabulka transakcí
Jeden řádek jedna aktivní transakce
Obsahuje mimo jiné TId, status, lastLSN
Tabulka „dirty pages“
Jeden řádek jedna dirty page v bufferu (všechny
změněné stránky nezapsané zatím na disk)
Obsahuje recLSN – první záznam v logu, který
způsobil příznak dirty (první záznam pro REDO)
V případě pádu systému jsou tabulky obnoveny
během první fáze analýzy
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
276
1
2
3
4
5
6
7
Skládá se ze tří kroků
Begin_checkpoint je zapsán do logu
End_checkpoint je vytvořen (obsahuje tabulky transakcí a dirty
pages) a zapsán do logu
Master record z LSN Begin_checkpointu je zapsán na určené
místo na disku
Všechny transakce běží vesele dál, jediné co je
garantováno jsou uložené tabulky odpovídající časově
LSN Begin_checkpointu
Stránky z bufferu nejsou přesunuty na disk
Efektivita této techniky závisí na hodnotě nejstarší recLSN
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
277
1
2
3
4
5
6
7
Fáze analýzy
Detekuje odkud se začne provádět REDO
Zjistí tabulky transakcí a dirty pages a aktualizuje je o záznamy
mezi begin a end checkpointem
REDO
Opakuje všechny změny z logu pro stránky, které jsou v tabulce
dirty pages (začne od nejstaršího recLSN)
Postupuje od nejstaršího záznamu po nejnovější
UNDO
Zruší efekt transakcí, které nepotvrdily
Postupuje od nejnovějšího záznamu po nejstarší
Pro každou UNDO operaci zapíše kompenzační záznam do logu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
278
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
279
1
2
3
4
5
6
7
Výhody
Rozložení zátěže/dat na více výpočetních uzlů
Navíc možnost efektivní replikace dat
▪ Robustní chování v případě výpadku části systému
▪ Efektivnější výpočty
Nevýhody
Pomalejší komunikace, různá rozhraní
Heterogenní systémy, synchronizace uzlů
Komunikační linky – další místo, kde se může něco pokazit,
těžko detekovatelné (techniky s timeout)
Transakce ale musí být ACID pořád, nezávisle na
fragmentaci a replikaci dat!
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
280
1
2
3
4
5
6
7
Synchronní replikace
Před potvrzením musí být aktualizovány všechny kopie, velká režije na
zámky + komunikace
Hlasování – většina kopií musí být přepsána (potřeba čtení většiny
kopií x při R(x))
Read-any write-all – pokud je čtení hodně časté (zámky na všechny
kopie x u W(x))
Asynchronní replikace
Kopie nemusí být aktualizovány všechny – různé kopie v době čtení
(snížení konzistence)
Primární/sekundární kopie – pouze primární kopii je možné měnit
Peer-to-peer replikace – je možné měnit přímo více kopií, je potřeba
řešit konflikty
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
281
1
2
3
4
5
6
Budeme uvažovat S2PL, které kopie objektů
zamykat závisí na typu replikace
Zámky v distribuovaném prostředí
7
Centralizované – všechny objekty jsou zamykány
na jednom místě
Primární kopie – zamyká se jen primární kopie
záznamu (každá může být ale jinde)
Plně distribuované – řeší manažer zámků na
serveru, kde je uložena požadovaná kopie
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
282
1
2
3
4
5
Uvažujeme detekci a zotavení z uváznutí
Lokální waits-for graf na každém uzlu nezachycuje globální závislosti
Příklad
6
7
T1 na uzlu A, T2 na uzlu B, read-any write-all
T1 = {r(x), w(y)} a T2 = {r(y), w(x)}, x, y na A i B
rl1[x]A r1[x]A rl2[y]B r2[y]B wl1[y]A wl1[y]B wl2[x]B wl2[x]A
Pomalá komunikace může vést k tzv. fantom deadlock – transakce T1 je
zrušena, ale ještě nestihne uvolnit zámky – může dojít ke zrušení T2
Existuje několik algoritmů pro detekci uváznutí v distribuovaném
prostředí (neřeší ale fantom deadlock)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
283
1
2
3
4
5
6
7
Centralizované zpracování lokálních waits-for grafů
Globální graf vytvořen sjednocením lokálních grafů
Kontrola jestli transakce čeká déle než zvolený time-out
Jednoduché řešení, někdy jediné možné pro případy, kdy nelze získat
waits-for graf od některých zúčastněných uzlů
Hierarchie uzlů (např. kraje, okresy, obce)
Pozorování - uváznutí je běžnější u souvisejících dat
Každý uzel udržuje waits-for graf pro svůj podstrom
Periodicky posílají grafy rodičům – frekvence závisí na pozici v
hierarchii (čím níž, tím častěji), jednou za čas se vše sjednotí v kořenu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
284
1
2
3
4
5
Transakce může využívat více manažerů zdrojů na více strojích
Co je na tom těžkého?
6
7
Co když některý z manažerů spadne, zatímco transakce potvrdí na
jiném stroji?
Co když probíhá zotavení a některé zúčastněné stroje/manažeři
nejsou dostupné?
Co když transakce nepozná, jestli manažer zdrojů spadl nebo jen
pokračuje v práci?
Předpokládáme
Každý manažer zdrojů nezávisle potvrdí/abortuje atomicky na
vlastních datech
Koordinátor transakce rozhodne, kdy bude transakce potvrzovat
Koordinátor nepovolí potvrzení, dokud transakce neskončí na všech
zúčastněných uzlech
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
285
1
2
3
Vycházíme z předpokladu, že transakce T
pracovala s daty manažerů zdrojů R1, …, Rn
Cílem je pak
4
5
6
7
Potvrdit transakci T na všech R1, …, Rn uzlech
Nebo abortovat T na všech R1, …, Rn uzlech
I v případě, že manažeři zdrojů, uzly a komunikační
kanály havarují během potvrzení/zrušení
Nemůže nastat potvrzení na Ri a zrušení na Rk
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
286
1
2
3
4
5
Standardní protokol pro zajištění atomicity
potvrzení/zrušení v distribuovaném prostředí
Zúčastněné role
6
7
Koordinátor – komponenta řídící potvrzení
Účastník – manažer zdrojů volaný transakcí, je
připraven potvrdit ve chvíli, kdy má všechna změněná
data na stabilním médiu
Koordinátor nesmí potvrdit transakci, dokud
nejsou všichni účastníci připraveni
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
287
1
2
3
4
5
Potvrzení je možné provést až po hlasování, že s ním všichni
zainteresovaní účastníci souhlasí
Potvrzení řídí centrální transakční manažer
První fáze – zpráva PREPARE (každý RM odpoví jestli potvrdí)
Druhá fáze – zpráva ABORT nebo COMMIT
6
7
připraven?
x, y
commit (x = y = ANO)
abort (x = NE or y = NE)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
288
1
Koordinátor zašle zprávu request-to-prepare všem účastníkům
Koordinátor čeká jak všichni účastnící odpoví
Každý účastník může
2
3
4
5
7
Odpovědět připraven, když je připraven potvrdit
Odpovědět nelze potvrdit (z libovolného důvodu)
Pozdržet odpověď jak dlouho chce
Pokud koordinátor obdrží zprávu připraven od všech, rozhone pro potvrzení transakce.
Jinak ji abortuje.
Koordinátor rozešle info o rozhodnutí všem účastníkům
Účastníci potvrdí příjem
4/20/2015
6
připraven?
x, y
commit (x = y = ANO)
abort (x = NE or y = NE)
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
289
1
2
3
4
5
6
7
Když jde vše dobře (pouze potvrzení), tak 2PC potřebuje 3
volání na rozhodnutí
Poslední potvrzení je jen pro úplnost logování
Neovlivní dobu odezvy, navíc mohou být odesílány dávkově
Účastník, který hlasuje připraven se ocitá na chvíli v
nejistotě
Odkryl karty a neví co ostatní
Musí čekat na koordinátora
Pokud spadne nebo je odpojen,
tak se později musí při zotavení
dozvědět výsledek
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
připraven?
ANO
???
290
1
2
3
4
5
6
7
Co když koordinátor nebo účastník neobdrží zprávu (timeout)
Když účastník neobdrží request-to-prepare, tak abortuje
Když koordinátor neobdrží zprávu od účastníka, tak také abortuje
Když účastník odeslal připraven a nedočkal se potvrzení od
koordinátora
▪ Je blokován, použije terminační protokol, aby rozhodl co dál. Naivní protokol –
zůstat blokovaný až do chvíle, kdy se koordinátor zotaví.
Koordinátor se nedočká potvrzení příjmu
▪ Připomene účastníkům že mají poslat potvrzení příjmu, může čekat dlouho
Kdy je možné konečně opustit transakci?
Účastník ve chvíli, kdy se dozví výsledek hlasování
Jakmile koordinátor obdrží potvrzení příjmu ode všech
Účastník nesmí potvrdit příjem dokud nemá vše zalogované (jinak by
koordinátor již nemusel vědět výsledek hlasování)
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
291
1
2
3
4
5
6
7
Koordinátor není nikdy blokován – může sám rozhodnout o zrušení transakce
Účastník odešle zprávu že je připraven potvrdit, během čekání na výsledek je
blokován – neví, jestli má potvrdit nebo zrušit podtransakci, přitom drží zámky
Teorém 1 – každý potvrzovací protokol (nejen 2PC) může být blokován z důvodu
chyby v komunikační vrstvě (má řešit chyby, přitom může být chybou blokován!)
Teorém 2 – žádný potvrzovací protokol nemůže zaručit nezávislé zotavení
účastníků u kterých došlo k chybě (koordinátor může být zrovna mimo provoz)
Existuje několik přístupů, které se snaží
vypořádat s důsledky předchozích teorémů
4/20/2015
Odhadnout výsledek (nějak skončit a alespoň uvolnit zámky)
Kooperativní terminační protokol (zjistit od ostatních účastníků)
3PC protokol (brání blokování, ale komunikace musí být 100%)
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
připraven?
ANO
???
292
1
2
3
4
5
6
7
Logování může být okamžité (synchronní) – uloženo na disk
před dalším odesláním zprávy, nebo líné (asynchronní)
Koordinátor
Log Start2PC
(+ seznam Ui)
Účastníci Ui
připraven?
x, y
Log commit
Log prepared
commit (x = y = ANO)
abort (x = NE or y = NE)
Log commited
Log done
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
293
1
Optimalizace pro případy, kdy je jen jeden účastník
Stačí pouze tři kola pro komunikaci
1.
2.
3.
2
3
4
5
6
7
Koordinátor odešle připrav se a přeber koordinaci
Účastník se připraví, potvrdí a vrátí zprávu o potvrzení
Původní koordinátor potvrdí a odešle done
Účastník si musí pamatovat že potvrdil dokud nepřijde zpráva
done (u 2. se může zpráva ztratit)
Dá se použít pro implementaci 2PC do systému, kde právě jeden z
účastníků nepodporuje fázi prepare
1.
2.
3.
4/20/2015
Tradiční hlasování zbývajících účastníků
Delegování koordinace na účastníka nepodporujícího prepare
Jakmile skončí, tak na základě výsledku poslat rozhodnutí
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
294
1
2
3
4
5
Někteří účastníci si mohou vzájemně držet
data v bufferech
Fáze nula je pro seznam těchto účastníků
6
7
Koordinátor jim pošle zprávu
Daní účastnící provedou flush bufferu a dokončí
všechny operace potřebné pro první fázi u 2PC
Pokud některý z účastníků neodpoví, je transakce
zrušena, jinak přejde do první fáze 2PC
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
295
1
2
3
4
5
6
7
2PC startuje v době, kdy ještě nejsou všechny
podtransakce hotové (např. trigger na závěr)
Účastník A odeslal prepared, účastník B ne a
modifikuje data uložená v A (reinfikuje A)
Pokud by B odeslal prepared, mohl by koordinátor
potvrdit transakci před dokončením operací na
reinfikovaném uzlu A
Proto musí A před navrácením výsledku B nejdříve vše
dokončit, uložit data a znovu poslat prepared
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
296
1
2
3
4
5
6
7
Pokud účastník pouze čte data, tak není třeba
Držet zámky pro čtení pro všechny fáze 2PC
Čekat na výsledek hlasování (stačí jen první fáze)
Uvolní zámky s request-to-prepare
Odpoví prepared-read-only čímž oznámí
koordinátorovi, že danému účastníkovi nemusí
zasílat výsledek hlasování
Obtížné implementovat – problémy spojené s
reinfection – možné porušení 2PL
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
297
1
2
3
Koordinátor neloguje start 2PC – při zotavení pak odpovídá
účastníkům commit (našel log commit) nebo abort
Předpokládá abort T když nenajde v logu informaci o T
Předpoklad implikuje
4
5
6
7
Pokud nejsou informace v logu, tak je transakce určitě zrušena
Pokud je transakce zrušena, tak účastníkovi stačí asynchronně zapsat
abort záznam do logu a neposílá done koordinátorovi
Pokud je transakce zrušena, nemusí koordinátor zapsat done záznam
Populární optimalizace používaná ve většině implementací 2PC
V [Ramakrishnan, Gehrke] jsou součástí i read-only transakce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
298
1
2
3
4
5
6
7
Účastník se zotavuje, v logu má jen prepared, musí zjistit výsledek
a koordinátor je mimo provoz
Každý účastník potřebuje adresy ostatních – obdrží je od
koordinátora v request-to-prepare
Zotavení pak probíhá následovně
Dotáže se ostatních účastníků na výsledek
Oslovený účastník reaguje následovně
▪ Pokud zná výsledek, tak odpoví commit nebo abort
▪ Pokud nebyl ani ve fázi prepared, odpoví abort (to samé by udělal koordinátor)
▪ Pokud je na tom stejně jako volající (v logu jen prepared), odpoví uncertain
Pokud se od některého účastníka dozví výsledek, provede commit
nebo abort a informuje všechny účastníky, co odpověděli uncertain
Je výhodné držet informaci o výsledku transakce
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
299
1
2
3
4
5
6
7
Poté co obdrží kladné odpovědi na prepare zprávu, odeše precommit
zprávu (nezapíše zatím commit log) a čeká na potřebný počet odpovědí
(dáno počtem potenciálních chyb k ošetření)
Zabraňuje blokování v případě, že nedochází ke komunikačním
výpadkům. Není moc realistické, ale i kdyby vůči nim odolný byl, tak by
zase mohl blokovat
3PC je daleko složitější než 2PC, a přitom jej vylepšuje jen lehce (brání jen
pár blokujícím situacím kdy je koordinátor mimo provoz)
3PC proto není moc používaný v praxi
3PC zajišťuje, že pokud je některý proces v neurčitém stavu, tak žádný
jiný proces nepotvrdí. Pokud jsou všechny v takovém stavu, tak mohou i
bez koordinátora rozhodnout o abortu
4/20/2015
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
300
1
Obecně – co nejvíce příklady, obrázky, atp… a taky zdroje
MTTF a MTTR u dnešních systémů
Příklady na DB modely + rozdíly (na příkladech)
2
3
4
5
7
Hnízděné transakce
Transakce se savepointy
Ságy
Reálné příklady na historie H1 – H12
Příklady (hlavně obrázky) na granulované zámky
Příklady historií, kde konverze zámků zvýší paralelismus
Uváznutí – prevence vs. detekce a řešení, pravděpodobnost uváznutí
DAG zámky na více hierarchiích
Časová razítka – příklad zpracování transakcí pomocí základních TO pravidel
4/20/2015
6
Transakce, RNDr. Jakub Lokoč, Ph.D., KSI MFF UK
301
Podobné dokumenty
Databáze - Státnice
SET DEFAULT – Téměř to samé jako SET NULL, hodnoty cizího klíče jsou
nastaveny na defaultní hodnotu sloupce, pokud dojde ke změně či smazání
odpovídajícího řádku v nadřízené tabulce.
Transakce
− je podíl času, kdy má systém přijatelnou dobu odezvy, k celkovému nabízenému času,
− měří se v procentech,
Herní design
• Instant save/load: kdykoliv je možné hru
přerušit a ve stejném místě navázat později
• Vždy je možné zvítězit: hráč se nesmí dostat do
situace, kdy ještě žije, ale efektivně už nemůže
vyhrát
15 milníků v historii sdružení CESNET 15 Milestones in the CESNET
a spravovat všechny vrstvy síťové architektury, zároveň mu však umožňu-
obsah úvod doporučení pro aplikaci přípravku entero zoo a
U domácích zvířat jsou velmi rozšířená onemocnění virové etiologie, a sice mór masoţravců, virová
hepatitida a parvovirová enteritida. K dnešnímu dni jsou tato onemocnění zjistitelná prakticky po c...
incoterms 2010 incoterms 2010
…Kühne + Nagel je dlouhodobě světovou jedničkou v námořní přepravě, globální dvojkou v leteckém cargu,
evropskou trojkou pozemní přepravy a světovou dvojkou ve službách kontraktní logistiky?
A víte...