Lock manager
In informatica, il Lock Manager è un modulo del DBMS che si occupa della gestione dei lock.
Nella maggior parte dei sistemi reali, il Lock Manager estende il Transaction Manager.
Modalità operativa
All'arrivo di una richiesta di read o write al Transaction Manager, quest’ultimo invia al Lock Manager un appropriata richiesta di lock.
In seguto all’avvenuta attribuzione del lock, il Transaction Manager inoltra la richiesta al Data Manager.
Richieste
Il Lock Manager risponde a richieste del seguente tipo:
- Lock(transaction_id, data_item, mode)
- Unlock(transaction_id, data_item)
In questo modo per ogni lock vengono salvati l’ID della transazione richiedente, i dati che devono essere messi in lock e la modalità di lock.
Modalità di lock
Le modalità di lock dei dati sono principalmente due:
- Shared (S), utilizzata per leggere dati (S-Lock)
- Exclusive (X), utilizzata per scrivere dati (X-Lock)
Date queste due modalità di lock possiamo creare una matrice di compatibilità di esecuzione.
Nella seguente tabella vediamo quando c’è conflitto o compatibilità delle operazioni:
X-Lock | S-Lock | |
---|---|---|
X-Lock | Conflitto | Conflitto |
S-Lock | Conflitto | Compatibile |
Lock table
Il Lock Manager gestisce una Lock Table realizzata tramite tecnica di hash con il dato come chiave, al fine di velocizzarne la ricerca. Ogni entry nella tabella corrisponde ad un dato. L’entry contiene un puntatore alla lista dei lock assegnati per quello stesso dato e un puntatore alla lista delle richieste in attesa per quel dato. Per facilitare il rilascio dei lock, tutte le entry relativa alla stessa transazione vengono collegate tra loro. La granuralità del lock può essere un record del database piuttosto che una pagina. In tal caso il Buffer Manager non fornirà una copia privata della pagina alle transazioni ma garantirà l’accesso esclusivo tramite semafori alla singola copia della pagina presente nel buffer pool.
Funzionamento
Acquisizione dei lock
Al fine di garantire l’atomicità delle operazioni di lock e unlock, la lock table viene divisa in porzioni regolate da semafori.
Se una richiesta di lock può essere soddisfatta, si inserisce una nuova entry nella lock table; in caso contrario la richiesta viene accodata.
Rilascio dei lock
Vi sono due tipi di modalità per il rilascio dei lock:
- Rilascio Immediato
- Rilascio Posticipato
Nel primo caso, l’unlock viene eseguito subito dopo l’esecuzione dell’operazione corrispondente, al fine di aumentare il livello di concorrenza del sistema.
Nel secondo caso, l’unlock viene posticipato fino al termine della transazione, riducendo il livello di concorrenza a fronte di un maggiore livello di isolamento.
Two-phase Locking
Vedi Two-phase Locking
Bibliografia
- Paolo Ciaccia, Dario Mario, Lezioni di basi di dati, 2013, Editrice Esculapio, ISBN-13: 978-8874887187