5° Anno TEORIA 5. Architettura di un DBMS | Page 6

17. Architettura di un DBMS Vers.2.0 – Maggio 2020 Esistono due tipi di lock: - exclusive Lock (lock esclusivo) o lock di scrittura: con questo tipo di lock nessuna transazione può ottenere un permesso di accesso al dato o elemento che interessa. - shared lock (lock condiviso) o lock di lettura: con questo tipo di lock le altre transazioni possono accedere al dato o all’elemento ma considerato solo il lettura. Per applicare la tecnica del lock è importante stabilire la granularità ovvero la dimensione degli oggetti e degli elementi della base di dati su cui il DBMS esercita il suo controllo. Un DBMS può stabilire le seguenti tipologie di granularità: - grossa: si aggiunge un lock al file contenente i dati (uno o più file corrispondono in genere ad una tabella); - media: si aggiunge un lock al record del file contenente i dati; - fine: si aggiunge un lock al campo del record del file contenente i dati; Uno dei problemi più gravi che un DBMS deve affrontare nella gestione dei lock è quello relativo alle situazioni di stallo o di attesa infinita o deadlock. Esempio: Consideriamo due transazioni T1 e T2 e due risorse R ed S. Può in teoria verificarsi che e contemporaneamente La transazione T1 imposta un lock sulla risorsa R La transazione T2 imposta un lock sulla risorsa S La transazione T1 imposta un lock sulla risorsa S La transazione T2 imposta un lock sulla risorsa R In pratica entrambe le transazioni, dopo aver bloccato le rispettive risorse, richiedono per proseguire la risorsa dell’altra. In questo caso si è verificata una situazione di stallo o di attesa infinita o deadlock perché ognuna attende l’altra. DOMANDA: Come è possibile risolvere una situazione di stallo o di attesa infinita o deadlock? 1) Una tecnica possibile (basata sul LOCK MANAGER) per risolvere il problema dello stallo, consiste nel far richiedere ad ogni transazione, prima dell’inizio della sua esecuzione, tutti i lock necessari in una volta sola. In accordo a questa strategia, sarà un componente del DBMS, chiamato lock manager, a stabilire se concedere o meno alla transazione che ne fa richiesta, i lock su tutte le risorse necessarie alla sua esecuzione, consultando una tabella dei lock per vedere se esistono altre transazioni che hanno già ottenuto qualche lock su qualche risorsa presente nelle lista, che non sia stata ancora rilasciata. Quindi riassumendo il lock manager, quando una transazione ne fa richiesta potrà: - concedere tutti i lock necessari, se non esiste, nella tabella dei lock, alcuna risorsa già in stato di lock (quindi bloccata) perché richiesta da un’altra transazione in esecuzione; - negare tutti i lock necessari perché una o più risorse necessarie alla sua esecuzione risultano già presenti nella tabella dei lock e quindi risultano bloccate da un’altra transazione in esecuzione. 2) Un’altra tecnica possibile (chiamata ABORT AND RESTART) per risolvere il problema dello stallo, consiste nel far abortire forzatamente una delle due transazioni. La transazione abortita dovrà obbligatoriamente: - ripristinare lo stato del sistema (nel nostro caso della base dati) prima della sua esecuzione - essere ripresentata con una priorità molto alta per essere immediatamente servita dal sistema. Autore: Rio Chierego (email: [email protected] - sito web: www.riochierego.it) Pag. 6