PA152Notes 081 CS 245: Database System Principles Notes 08: Failure Recovery Hector Garcia-Molina Pavel Rychlý
PA152Notes 082 Integrita nebo správnost dat Chtěli bychom, aby data byla stále „bezesporná“ a „správná“. EMP Name White Green Gray Age
PA152Notes 083 Integritní omezení Predikáty, které musí data splňovat Příklady: - x je klíčem relace R - v R platí závislost x y - Domain(x) = {Red, Blue, Green} je platný index atributu x v R - žádný zaměstnanec by neměl mít více než dvojnásobek průměrného platu
PA152Notes 084 Definice: Konzistentní stav: splňuje všechna omezení Konzistentní DB: DB v konzistentním stavu
PA152Notes 085 Omezení ( jak je používáme zde) nemusí zajistit „plnou správnost“ Příklad 1 Transakční omezení Pokud měníme plat: new salary > old salary Pro smazání bankovního účtu musí platit: balance = 0
PA152Notes 086 Example 2 Databáze by měla odpovídat skutečnému světu. DB Realita Omezení ( jak je používáme zde) nemusí zajistit „plnou správnost“
PA152Notes 087 v každém případě pokračuj s kontrolou podmínek Pozorování: DB nemůže být konzistentní stále. Příklad: a 1 + a 2 +…. a n = TOT ( constraint ) Deposit $100 in a 2 : a 2 a TOT TOT + 100
PA152Notes 088 a 2 TOT Příklad: a 1 + a 2 +…. a n = TOT ( constraint ) Deposit $100 in a 2 : a 2 a TOT TOT + 100
PA152Notes 089 Transakce: soubor akcí udržujících konzistenci Consistent DBConsistent DB’ T
PA152Notes 0810 Velký předpoklad: Pokud T začíná v konzistentním stavu a T běží samostatně T končí také v konzistentním stavu
PA152Notes 0811 Správnost (neformálně) Pokud přerušíme běžící transakci, DB zůstane conzistentní Každá transakce vidí konzistení DB
PA152Notes 0812 Jak může dojít k poruše konzistence? Chyba transakce Chyba DBMS Výpadek Hardwaru např., výpadek disku poruší stav účtu na disku Sdílení Dat např.: T1: přidej 10% platu programátorům T2: změň programátor systémový analytik
PA152Notes 0813 události žádoucí nežádoucí předpokládané nepředpokládané Model výpadků
PA152Notes 0814 Model výpadků procesor paměť disk CPU M D
PA152Notes 0815 Nežádoucí očekávané události: Krach systému - ztráta paměti - zastavení procesoru, reset
PA152Notes 0816 Příklady: Ztráta dat na disku Chyba paměti bez zastavení procesoru Imploze CPU pohlcující známý vesmír… Nežádoucí neočekávané: vše ostatní!
PA152Notes 0817 Je tento model rozumný? Přístup: Přidání kontrol na nejnižší úrovni + redundance zvýší pravděpodobnost zachování podmínek. Tj., Replikace disku (stabilní uložení) Paritní součty v paměti Kontrola CPU
PA152Notes 0818 Model běhu transakce: Organizace paměti Paměť Disk x x
PA152Notes 0819 Základní operace: Input (x): blok obsahující x paměť Output (x): blok obsahující x disk Read (x,t): Input(x) pokud je potřeba t hodnota x v bloku Write (x,t): Input(x) pokud je potřeba hodnota x v bloku t
PA152Notes 0820 Klíčový problém: nedokončené transakce PříkladOmezení: A=B T 1 : A A 2 B B 2
PA152Notes 0821 T 1 :Read (A,t); t t 2 Write (A,t); Read (B,t); t t 2 Write (B,t); Output (A); Output (B); A: 8 B: 8 A: 8 B: 8 paměť disk 16 výpadek!
PA152Notes 0822 Potřebujeme atomičnost: provedení všech akcí transakce nebo vůbec žádné
PA152Notes 0823 T 1 :Read (A,t); t t 2 A=B Write (A,t); Read (B,t); t t 2 Write (B,t); Output (A); Output (B); A:8 B:8 A:8 B:8 paměť disk žurnál Undo logging (Okamžitý zápis)
PA152Notes 0824 Drobná “komplikace” Žurnál je nejdříve vytvářen v paměti Nezapisuje se na disk při každé akci paměť DB žurnál A: 8 16 B: 8 16 Log: A: 8 B: 8 16 CHYBA # 1
PA152Notes 0825 Drobná “komplikace” Žurnál je nejdříve vytvářen v paměti Nezapisuje se na disk při každé akci paměť DB žurnál A: 8 16 B: 8 16 Log: A: 8 B: 8 16 CHYBA # 2...
PA152Notes 0826 Pravidla Undo logging (1) Pro každou akci vytvoř v žurnálu záznam obsahující starou hodnotu (2) Před změnou x na disku musí být na disku záznamy žurnálu týkající se x (write ahead logging: WAL) (3) Před vytvořením záznamu v žurnálu musí být všechny zápisy transakce uloženy na disku.
PA152Notes 0827 Pravidla obnovy: Undo logging For every Ti with in log: - If or in log, do nothing - Else For all in log: write (X, v) output (X ) Write to log JE TO SPRÁVNĚ?
PA152Notes 0828 Pravidla obnovy: Undo logging (1) Let S = set of transactions with in log, but no (or ) record in log (2) For each in log, in reverse order (latest earliest) do: - if Ti S then - write (X, v) - output (X) (3) For each Ti S do - write to log
PA152Notes 0829 Co v případě výpadku během obnovy? Žádný problém! Undo je idempotentní
PA152Notes 0830 Redo logging (odložený zápis) T 1: Read(A,t); t t 2; write (A,t); Read(B,t); t t 2; write (B,t); Output(A); Output(B) A: 8 B: 8 A: 8 B: 8 paměť DB žurnál 16 output 16
PA152Notes 0831 Pravidla Redo logging (1) Pro každou akci vytvoř v žurnálu záznam obsahující novou hodnotu (2) Před změnou X na disku (DB) musí být na disku všechny záznamy žurnálu (včetně commit) pro transakci měnící X
PA152Notes 0832 For every Ti with in log: –For all in log: Write(X, v) Output(X) Pravidla obnovy: Redo logging JE TO SPRÁVNĚ?
PA152Notes 0833 (1) Let S = set of transactions with in log (2) For each in log, in forward order (earliest latest) do: - if Ti S then Write(X, v) Output(X) volitelně Pravidla obnovy: Redo logging
PA152Notes 0834 Obnova je velice POMALÁ ! Redo log: PrvníT1 zapíše A,B Poslední záznamPotvrzeno před rokem záznam (1 rok starý)--> STÁLE potřebujeme pro obnovu!!... výpadek
PA152Notes 0835 Řešení: Kontrolní body (jednoduchá verze) Opakovaně: (1) Přestaň přijímat nové transakce (2) Počkej na ukončení všech transakcí (3) Ulož všechny záznamy žurnálu na disk (4) Ulož všechny bloky na disk (DB) (5) Zapiš záznam “checkpoint” na disk (log) (6) Pokračuj ve zpracování transakcí
PA152Notes 0836 Příklad: co dělat při obnově? Redo log (disk): Checkpoint Crash...
PA152Notes 0837 Hlavní nevýhody: Undo logging: ze zálohy DB nelze vytvořit aktuální stav DB Redo logging: všechny modifikované bloky musíme držet v paměti až do commitu zápisy na disk jsou vynuceny pravidly žurnálu a ne přístupem k datům
PA152Notes 0838 Řešení: undo/redo logging! Update
PA152Notes 0839 Pravidlo undo/redo logging Před zapsáním elementu X na disk, musí být na disk zapsán záznam žurnálu (WAL) Obnova undo/redo logging Ukončené transakce zopakujeme (redo) od začátku Nedokončené transakce vrátíme (undo) od konce
PA152Notes 0840 Průběžné kontrolní body L O G začátky transakcízápis bloků s nezapsanými modifikacemi Start-ckpt active TR: T1,T2,... end ckpt...
PA152Notes 0841 Příklad co dělat při obnově? T1 nemá commit L O G T 1,- a... Ckpt T 1... Ckpt end... T1-bT1-b Undo T 1 (undo a,b)
PA152Notes 0842 Example LOGLOG... T1aT1a T1bT1b T1cT1c T 1 cmt... ckpt- end ckpt-s T 1 Redo T1: (redo b,c)
PA152Notes 0843 Proces obnovy: Zpětný běh (konec žurnálu začátek posledního k. bodu) –vytvoř množinu S potvrzených transakcí –vrať (undo) akce transakcí, které nejsou v S Vrácení trvajících transakcí –vrať řetězce akcí transakcí z (aktivní transakce kontrolního bodu) - S Dopředný běh (začátek posledního k. bodu konce žurnálu) –opakuj akce transakcí z S backward pass forward pass start check- point
PA152Notes 0844 Akce reálného světa Př.: vybírání peněz a ATM Ti = a 1 a 2 …... a j …... a n $
PA152Notes 0845 Řešení (1) provedení akcí reálného světa po commitu (2) akce pokud možno idempotentní
PA152Notes 0846 ATM Give$$ (amt, Tid, time) $ give(amt) lastTid: time:
PA152Notes 0847 Výpadek média A: 16 Řešení: Kopie dat na nižší úrovni, záloha DB + žurnál
PA152Notes 0848 Example #3: DB Dump + Log záložní DB aktivní DB žurnál Při výpadku, – obnova DB ze zálohy – zopakuj Redo pro každou nedokončenou trasnakci
PA152Notes 0849 Kdy zahodit žurnál? check- point db dump last needed undo not needed for media recovery not needed for undo after system failure not needed for redo after system failure log time
PA152Notes 0850 Souhrn Konzistence dat Jeden zdroj problémů: - Logging - Redundancy Další zdroj problémů: Sdílení dat