Doplňující referát k přednášce Transakce Šárka Hlušičková Uváznutí (deadlock) Doplňující referát k přednášce Transakce Šárka Hlušičková
Uváznutí – definice, podmínky Stav, kdy každá transakce z množiny uváznutých transakcí čeká na jinou transakci z této množiny, až uvolní prostředky. Aby nastalo uváznutí, musí být současně splněny všechny čtyři následující podmínky (Coffmanovy podmínky): Vzájemné vyloučení – prostředek může být přidělen pouze jednomu procesu Držení prostředků – proces smí 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
Pravděpodobnost uváznutí Uvažujme systém s R záznamy, n+1 transakcemi a každá transakce sestává z a+1 update akcí. Každý update uzamkne náhodný záznam (uvolnění při commitu). Předpokládáme na << R (většina záznamů odemčena po většinu času). Pravděpodobnost čekání na zámek (kolize) je přibližně: PW = na/2R Zdůvodnění: Každá transakce má uzamčeno v průměru a/2 záznamů a počet ostatních transakcí je n. Transakce má a požadavků na zámek, tj. pravděpodobnost, že konkrétní transakce T bude během svého života čekat je: PW(T) = 1 – (1- PW)a ≈ aPW = na2/2R (Tj. rozepsaný součet konečné binom. řady 1 −𝑃𝑊 𝑎 = 1 – 𝑎 1 𝑃𝑊 + 𝑎 2 𝑃𝑊 2 – ... + 𝑎 𝑎 𝑃𝑊 𝑎 , protože na<<R, a tedy PW << 1, je možné členy 𝑎 𝑖 𝑃𝑊 𝑖 zanedbat.)
Pravděpodobnost uváznutí (pokračování) Uváznutí sestává z cyklu. Pravděpodobnost, že transakce T´ uvázne v cyklu délky 2, je PW (T)2/n (pst,ze T´´čeká na T´ je, PW(T)/n ). Pravděpodobnost, že uvázne v cyklu délky 3, je řádově PW (T)3, tj. obecně v cyklu délky i je to řádově PW (T)i. Pokud tedy pravděpodobnost čekání je malá (řekněme menší než 0,1), pak lze tyto vyšší mocniny ignorovat, z čehož plyne: čekání je vzácné, cykly jsou vzácné2 a většina cyklů je délky 2. Pst uváznutí transakce T je tedy přibližně: PW (T)2/n ≈ na4/4R2 a pst uváznutí v celém systému je přibližně: n2a4/4R2
Pravděpodobnost uváznutí – důsledky Výše uvedený model je zjednodušený, nicméně z toho plyne: Pravděpodobnost čekání roste kvadraticky s velikostí transakce ( ≈ na2/2R), je tedy vhodné využít: jemnou granularitu zamykání sdílené zámky pro čtení atd. což sníží kolize při zamykání (snížení kolizí na polovinu, snížení čekání na čtvrtinu a uváznutí dokonce na šestnáctinu). Pravděpodobnost uváznutí v systému roste kvadraticky s počtem transakcí ( ≈ n2a4/4R2), tj. transakční monitor musí hlídat jejich počet.
Možnosti řešení Vůbec si problému nevšímat Detekce a zotavení Vyhnutí se uváznutí Prevence zajištěná nesplněním jedné ze čtyř podmínek Velmi jednoduchým řešením je nikdy nečekat a místo čekání na zámek transakci okamžitě rollbackovat, tím se ale můžeme dostat do livelocku (tj. transakce není nikdy dokončena), což se hůře detekuje a navíc spotřebovává zdroje.
Prevence uváznutí Alespoň jedna z nutných podmínek pro uváznutí není splněna: Vzájemné vyloučení – nelze, došlo by k porušení izolace. Držení prostředků – všechny potřebné zdroje buď alokujeme při spuštění transakce, nebo neumožníme alokovat další zdroje, má-li transakce už nějaký v držení. Může vést k umoření transakce nebo neefektivnímu využití zdrojů. Neodnímatelnost – transakci držící prostředek (resp. čekající na něj a držící jiný) abortujeme. Čekání do kruhu – zdroje jsou očíslovány a transakce smí žádat o zdroje pouze ve vzestupném pořadí.
Metody Wait/Die a Wound/Wait Každá transakce má přiděleno časové razítko, které určuje prioritu (při rollbacku se nemění). Pokud transakce Ti čeká na zámek držený transakcí Tj: Metoda Wait/Die Pokud Ti je starší než Tj, pak Ti smí čekat na zámek držený transakcí Tj. Pokud Tj je starší než Ti, pak Ti rollbackuje (die). Metoda Wound/Wait Pokud Ti je starší než Tj, pak Tj rollbackuje (wounded). Pokud Tj je starší než Ti, pak Ti čeká na zámek.
Metody Wait/Die a Wound/Wait (pokračování) Wait/Die abortuje častěji, ale abortovaná transakce obvykle provede jen málo práce. Wound/Wait rollbackuje vzácně, ale abortovaná transakce běží déle. Porušuje podmínku neodnímatelnosti – prioritní/časové upřednostňování transakcí. Výhody: jednoduché, nemůže dojít k umoření transakce, protože starší transakce má vždy přednost. Nevýhody: může dojít k rollbacku, i přestože by nedošlo k uváznutí – ne zcela efektivní využití zdrojů.
Další metody prevence uváznutí Konzervativní 2PL protokol všechny zámky před spuštěním transakce (jinak čeká ve frontě) nutno vědět, co vše je třeba zamknout (obecně nerozhodnutelný problém). Timeout na přidělení zámku pokud transakce požaduje více zámků, každý požadavek je asociován s časem, a pokud není zámek v tomto čase přidělen, transakce rollbackuje.
Vyhnutí se uváznutí (deadlock avoidance) Dynamická metoda, zámek je přidělen pouze tehdy, pokud nemůže dojít k uváznutí. Systém udržuje bezpečný stav, kdy každému procesu lze přidělit všechny požadované zdroje – graf alokace zdrojů (hledání cyklu). To ale znamená znát stav všech zdrojů v systému a všechny požadavky procesů (!).
Detekce uváznutí a zotavení Timeout – transakce dlouho nic nedělá. Waits-for graf – minimalizace počtu abortů, cenou výpočetní náročnost: vrchol T – transakce T hrana z T do T´ – T čeká na zámek držený T´ nebo T bude čekat na zdroj, který bude přidělen T´(tj. T je za T´v seznamu) a jejich požadavky jsou nekompatibilní cyklus v grafu – uváznutí Zotavení obvykle znamená restart nějaké transakce, která se uváznutí účastnila. Výběr dle času spuštění, priority, délky logu... Může dojít k opětovnému deadlocku nebo i livelocku.
Zdroje Lokoč, Jakub: Transakce [online], <http://siret.ms.mff.cuni.cz/lokoc/UK/Transakce.pdf>. Gray, Jim; Reuter, Andreas: Transaction processing: concepts and techniques. SanMateo (Cal.): Morgan Kaufmann, 1993. ISBN 1-55860-190-2. The Johns Hopkins University, Department of Computer Science: Operating Systems 600.418: Deadlocks [online], <www.cs.jhu.edu/~yairamir/cs418/os4/sld001.htm>. Kazuhiro Minami: CS411 Database Systems: 15: Distributed Transaction [online], <http://www.cs.uiuc.edu/class/fa08/cs411/slides/cs411-distributed-transaction.ppt>.