Controllo della concorrenza
Il controllo della concorrenza è essenziale per evitare interferenze tra transazioni multiple che accedono al database contemporaneamente
Le tecniche principali includono:
- Locking: blocca gli accessi concorrenti agli stessi data item
- Timestamp: utilizza identificatori unici per ordinare le transazioni e garantire la serializzabilità
Tecniche di Locking
Lock Binari
- Definizione: un lock binario ha due stati → Locked (1) e Unlocked (0)
- Operazioni:
lock_item(X)
: richiede il lock su X, se già bloccato la transazione attende
unlock_item(X)
: rilascia il lock su X e sveglia eventuali transazioni in attesa
Lock Shared/Esclusivi (Multiple Mode Lock)
- Stati:
- Read_Locked (condiviso): più transazioni possono leggere contemporaneamente
- Write_Locked (esclusivo): solo una transazione può scrivere
- Unlocked
- Operazioni:
Read_Lock(X)
: acquisisce un lock condiviso per lettura
Write_Lock(X)
: acquisisce un lock esclusivo per scrittura
Unlock(X)
: rilascia il lock
Protocollo Two-Phase Locking (2PL)
Tutte le operazioni locking precedono la prima operazione di Unlock
Divide la transazione in due fasi:
- Expanding Phase: acquisizione di lock (nessun rilascio)
- Shrinking Phase: rilascio di lock (nessuna acquisizione)
- Varianti:
- 2PL conservativo: richiede il lock di tutti gli item all'inizio (deadlock-free ma poco pratico)
- 2PL stretto: non rilascia lock esclusivi fino al commit/abort (garantisce schedule stretti)