Controllo concorrenza Esercitazioni - Basi di dati (complementi) Autore: Dr. Simone Grega Esercizio. Dati gli schedule: s r w r w r w s r w r w r3 w r r3 s3 r r3 rz w w3 Specificare, con una breve giustificazione, a quali delle seguenti classi ciascuno di essi appartiene: S (seriale), CSR (conflict serializzabile), PL (generabile da uno scheduler basato sul lock a due fasi), e TS (generabile da uno scheduler che utilizzi il metodo dei time stamp; si assuma che l ordinamento degli identificatori delle transazioni corrisponda quello dei timestamp).
Schedule s r w r w r w Caso seriale Lo schedule non e seriale perche le transazioni e effettuano letture e scritture inserite all interno della transazione. 3 Schedule s r w r w r w Caso conflict serializable - Costruiamo il grafo dei conflitti: r w r w r w t t t - Lo schedule appartiene alla classe CSR in quanto il grafo dei conflitti e aciclico 4
Schedule s r w r w r w Caso PL Simuliamo il funzionamento dello scheduler: Per ogni operazione, inseriamo il lock corrispondente, se necessario Costruiamo uno schedule con i lock esclusivi a partire da s, rispettando le regole: lock ben formato, lock legale, PL Lock acquisiti subito prima di effettuare l operazione Verifichiamo che lo schedule sia eseguibile e che non dia luogo ad attese su singoli comandi che alterano l ordine dei comandi e quindi rendono lo schedule non Pl NB se nel corso della assegnazione dei lock verifichiamo che qualche regola e violata, possiamo sospendere la analisi. 5 Eseguiamo i due passi r w r w r w A. costruiamo uno schedule con i lock esclusivi a partire da s. Risultato: T T T l r w (qui non possiamo inserire u per non violare PL) l r w (non e rispettata la legalita ) Per rispettare la proprieta di legalita, avremmo dovuto prima fare unlock su, ma allora non possiamo rispettare la proprieta di PL perche la transazione deve ancora effettuare lock su. Lo schedule non e PL 6 3
Tuttavia, non si creano deadlock Qui chiede il lock prima che To lo rilasci e una delle possibili combinazioni di eventi, dipende dalla velocita relativa dei processi Schedule con richieste di lock Schedule originale: r w r w r w Schedule eseguito : r w r w r w lx rx wx lx ly ry ly uy wy uy ux rx wx ux Locks X: X: ( attende ) Y: Y: ( attende ) Y: ( puo procedere) Y: X: ( puo procedere) 7 Schedule s r w r w r w 8 4
Schedule s r r 9 Schedule s r w r w 5
Schedule s r w r r w r Schedule s r w r w r w r w 6
Schedule s r w r w r r w r w r 3 Schedule s r w r w r w r w r w r w Le assegnazioni non generano conflitti quindi s e della classe TS 4 7
Schedule s3 r r3 rz w w3 Caso seriale Lo schedule non e seriale perche le transazioni 3 e effettuano letture e scritture inserite all interno della transazione 5 Schedule s3 r r3 rz w w3 Caso conflict serializable - Costruiamo il grafo dei conflitti: r r3 rz w w3 t t3 Grafo dei conflitti - Lo schedule non appartiene alla classe CSR in quanto il grafo dei conflitti e ciclico 6 8
Schedule s3 r r3 rz w w3 Caso PL Costruiamo uno schedule con i lock esclusivi a partire da s, rispettando le regole: lock ben formato, lock legale, PL Se ci riusciamo, lo schedule e PL. 7 Eseguiamo le assegnazioni del lock e unlock r r3 rz w w3 l r l3 r3 lz rz uz l (negato, in coda) l3 (negato, 3 in coda) La richiesta di lock su e negata, altrimenti non verrebbe rispettata la proprieta ldi legalita. Lo schedule non e PL. Nel nuovo schedule che viene eseguito viene negato il lock anche a l3, per cui lo schedule va in 8 deadlock. 9
In questo caso, si crea un deadlock Schedule con richieste di lock lx l3y lz ly l3x Locks X: Y: 3 Z: Y: 3 ( attende 3) X: 3 (3 attende deadlock) T T3 9 Schedule s3 r r3 rz w w3 r w rz 3 r3 w3 3 z Il comando w della transazione tenta di scrivere in dopo che il comando r3 ha letto in, questo crea conflitto. Lo schedule non appartiene alla classe TS
Esercizio. Si consideri uno scheduler basato su timestamps. Sono date tre transazioni T, T, T3 con i rispettivi timestamps, ottenuti dallo scheduler: ts(t) =, ts(t) = 5, ts(t3) = 75. Descrivere il comportamento dello scheduler rispetto alla seguente sequenza di operazioni: R(B) R(A) R3(C) W(B) W(A) W(C) W3(A) operazioni Risultato timestamps dati commento T T T3 A B C RT WT RT WT RT WT R(B) R(A) 5 R(C) 75 W(B) W(A) W(C) 5 T scrive un valore gia' letto da T3 che e' piu' recente => viene terminata W(A) 75 T3 sovrascrive un valore gia' scritto da T che e' piu' recente => l'operazione viene ignorata e T3 puo' proseguire
Esercizio.3 E' dato il seguente schedule S, costituito dalle transazioni T, T, T3: S = rz r w r3 r3z r w w3 w3z r r w w a) Dire se S e' serializzabile ai conflitti, indicando il suo grafo di precedenza; b) Modificare le transazioni T, T, T3, inserendo primitive di lock/unlock binario in modo che ciascuna segua il protocollo PL, e in modo che per ciascun item venga acquisito il lock il piu' tardi possibile e rilasciato prima possibile (compatibilmente con le regole PL). Scrivere le tre transazioni cosi' modificate; c) Riscrivere S utilizzando le nuove transazioni con i lock, cercando cioe' di eseguire le operazioni nello stesso ordine indicato da S. Ogni volta che una operazione pone una transazione in attesa su un lock, si passi alle operazioni successive, nell'ordine, delle transazioni che possono proseguire. Indicare la sequenza ottenuta. Che fenomeno si verifica? In che modo lo scheduler potrebbe prevenire tale fenomeno? 3 Domanda a Schedule s rz r w r3 r3z r w w3 w3z r r w w - Costruiamo il grafo dei conflitti: rz r w r3 r3z r w w3 w3z r r w w t t t3 - Lo schedule non appartiene alla classe CSR in quanto il grafo dei conflitti e ciclico 4
Domanda b Lo schedule e rz r w r3 r3z r w w3 w3z r r w w Le transazioni (con le versioni modificate ottenute con le assegnazioni di lock e unlock) sono: T r w r w -> l r w l u r w u T rz r w r w -> lz rz l r w l uz u r w u T3 r3 r3z w3 w3z -> l3 r3 l3z r3z w3 u3 w3z u3z 5 Nuovo schedule Lz rz l r w l3 r3 l3z r3z l r w w3 u3 w3z u3z l uz u r l u r w u w u 6 3
Eseguiamo il nuovo schedule Lz rz l r w l3 r3 l3z r3z l r w w3 u3 w3z u3z l uz u r l u r w u w u 3 lz rz l r w l3 (attesa) l r w l (attesa) l (attesa deadlock) Si verifica un deadlock 7 4