Controllo della concorrenza DBMS: timestamp e protocolli basati su lock

Cos'è il controllo della concorrenza?

Controllo della concorrenza in Database Management System è una procedura di gestione di operazioni simultanee senza conflitti tra loro. Garantisce che le transazioni del database siano eseguite contemporaneamente e accuratamente per produrre risultati corretti senza violare l'integrità dei dati del rispettivo database.

L'accesso simultaneo è abbastanza semplice se tutti gli utenti leggono semplicemente i dati. Non c'è modo che possano interferire tra loro. Sebbene per qualsiasi database pratico, avrebbe un mix di operazioni READ e WRITE e quindi la concorrenza è una sfida.

DBMS Concurrency Control viene utilizzato per risolvere tali conflitti, che si verificano principalmente con un sistema multiutente. Pertanto, Concurrency Control è l'elemento più importante per il corretto funzionamento di un Database Management System in cui due o più transazioni di database vengono eseguite simultaneamente, il che richiede l'accesso agli stessi dati.

Potenziali problemi di concorrenza

Ecco alcuni problemi che probabilmente dovrai affrontare durante l'utilizzo del metodo di controllo della concorrenza DBMS:

  • Aggiornamenti persi si verificano quando più transazioni selezionano la stessa riga e aggiornano la riga in base al valore selezionato
  • I problemi di dipendenza senza commit si verificano quando la seconda transazione seleziona una riga che viene aggiornata da un'altra transazione (lettura sporca)
  • Lettura non ripetibile si verifica quando una seconda transazione tenta di accedere alla stessa riga più volte e legge ogni volta dati diversi.
  • Problema di riepilogo errato si verifica quando una transazione riassume il valore di tutte le istanze di un elemento di dati ripetuto e la seconda transazione aggiorna alcune istanze di quello specifico elemento di dati. In tale situazione, il riepilogo risultante non riflette un risultato corretto.

Perché utilizzare il metodo della concorrenza?

I motivi per utilizzare il metodo di controllo della concorrenza è DBMS:

  • Applicare l'isolamento attraverso la mutua esclusione tra transazioni in conflitto
  • Per risolvere i problemi di conflitto di lettura-scrittura e scrittura-scrittura
  • Preservare la coerenza del database preservando costantemente gli ostacoli all'esecuzione
  • Il sistema deve controllare l'interazione tra le transazioni simultanee. Questo controllo viene ottenuto utilizzando schemi di controllo simultaneo.
  • Il controllo della concorrenza aiuta a garantire la serializzabilità

Esempio

Supponiamo che due persone si rechino contemporaneamente ai chioschi elettronici per acquistare un biglietto del cinema per lo stesso film e lo stesso orario di spettacolo.

Tuttavia, è rimasto solo un posto libero per la proiezione del film in quella particolare sala. Senza il controllo della concorrenza nel DBMS, è possibile che entrambi gli spettatori finiscano per acquistare un biglietto. Tuttavia, il metodo di controllo della concorrenza non consente che ciò accada. Entrambi gli spettatori possono comunque accedere alle informazioni scritte nel database dei posti a sedere del film. Ma il controllo della concorrenza fornisce un ticket solo all'acquirente che ha completato per primo il processo di transazione.

Protocolli di controllo della concorrenza

Diversi protocolli di controllo della concorrenza offrono diversi vantaggi tra la quantità di concorrenza che consentono e la quantità di overhead che impongono. Di seguito sono riportate le tecniche di controllo della concorrenza in DBMS:

  • Protocolli basati su lock
  • Protocollo di bloccaggio a due fasi
  • Protocolli basati su timestamp
  • Protocolli basati sulla convalida

Protocolli basati su lock

Protocolli basati su blocco in DBMS è un meccanismo in cui una transazione non può leggere o scrivere i dati finché non acquisisce un blocco appropriato. I protocolli basati su blocchi aiutano a eliminare il problema di concorrenza in DBMS per transazioni simultanee bloccando o isolando una transazione particolare per un singolo utente.

Un blocco è una variabile di dati associata a un elemento di dati. Questo blocco indica che le operazioni che possono essere eseguite sull'elemento di dati. I blocchi in DBMS aiutano a sincronizzare l'accesso agli elementi del database tramite transazioni simultanee.

Tutte le richieste di blocco vengono inviate al gestore del controllo della concorrenza. Le transazioni procedono solo una volta concessa la richiesta di blocco.

Blocchi binari: Un blocco binario su un elemento dati può essere bloccato o sbloccato.

Condiviso/esclusivo: Questo tipo di meccanismo di blocco separa i blocchi nel DBMS in base al loro utilizzo. Se viene acquisito un blocco su un elemento dati per eseguire un'operazione di scrittura, viene chiamato blocco esclusivo.

1. Blocco condiviso (S):

Un blocco condiviso è anche chiamato blocco di sola lettura. Con il blocco condiviso, l'elemento dati può essere condiviso tra transazioni. Questo perché non avrai mai il permesso di aggiornare i dati sull'elemento dati.

Ad esempio, considera il caso in cui due transazioni leggono il saldo del conto di una persona. IL banca dati consentirà loro di leggere inserendo un lucchetto condiviso. Tuttavia, se un'altra transazione desidera aggiornare il saldo di quel conto, il blocco condiviso lo impedisce fino al termine del processo di lettura.

2. Blocco esclusivo (X):

Con l'Exclusive Lock un dato può essere sia letto che scritto. Questo è esclusivo e non può essere mantenuto contemporaneamente sullo stesso elemento di dati. X-lock viene richiesto utilizzando l'istruzione lock-x. Le transazioni possono sbloccare l'elemento dati dopo aver terminato l'operazione di "scrittura".

Ad esempio, quando una transazione deve aggiornare il saldo del conto di una persona. Puoi consentire questa transazione posizionando il blocco X su di essa. Pertanto, quando la seconda transazione vuole leggere o scrivere, il blocco esclusivo impedisce questa operazione.

3. Protocollo di blocco semplicistico

Questo tipo di protocolli basati su lock consente alle transazioni di ottenere un lock su ogni oggetto prima di iniziare l'operazione. Le transazioni possono sbloccare l'elemento dati dopo aver terminato l'operazione di "scrittura".

4. Blocco della pre-rivendicazione

Il protocollo di blocco pre-rivendicazione aiuta a valutare le operazioni e creare un elenco di elementi di dati richiesti necessari per avviare un processo di esecuzione. Nella situazione in cui vengono concessi tutti i blocchi, la transazione viene eseguita. Successivamente, tutti i blocchi si sbloccano al termine di tutte le operazioni.

Fame

La fame è la situazione in cui una transazione deve attendere un periodo indefinito per acquisire un blocco.

Ecco le cause della carestia:

  • Quando lo schema di attesa per gli oggetti bloccati non viene gestito correttamente
  • In caso di perdita di risorse
  • La stessa transazione viene selezionata ripetutamente come vittima

Deadlock

Deadlock si riferisce a una situazione specifica in cui due o più processi sono in attesa l'uno dell'altro per rilasciare una risorsa oppure più di due processi sono in attesa della risorsa in una catena circolare.

Protocollo di bloccaggio a due fasi

Protocollo di bloccaggio a due fasi noto anche come protocollo 2PL è un metodo di controllo della concorrenza in DBMS che assicura la serializzabilità applicando un blocco ai dati della transazione che blocca altre transazioni per accedere agli stessi dati simultaneamente. Il protocollo Two Phase Locking aiuta a eliminare il problema della concorrenza in DBMS.

Questo protocollo di blocco divide la fase di esecuzione di una transazione in tre parti diverse.

  • Nella prima fase, quando la transazione inizia ad essere eseguita, richiede l'autorizzazione per i blocchi di cui ha bisogno.
  • La seconda parte è dove la transazione ottiene tutti i lock. Quando una transazione rilascia il suo primo lock, inizia la terza fase.
  • In questa terza fase la transazione non può richiedere nuovi lock. Invece, rilascia solo i blocchi acquisiti.

Protocollo di bloccaggio a due fasi

Il protocollo Two-Phase Locking consente a ciascuna transazione di effettuare una richiesta di blocco o sblocco in due passaggi:

  • Fase di crescita: In questa fase la transazione può ottenere dei lock ma non rilasciare alcun lock.
  • Fase di contrazione: In questa fase una transazione può rilasciare i lock ma non ottenere alcun nuovo lock

È vero che il protocollo 2PL offre serializzabilità. Tuttavia, non garantisce che non si verifichino deadlock.

Nel diagramma sopra riportato, è possibile vedere che i rilevatori di deadlock locali e globali cercano i deadlock e li risolvono ripristinando le transazioni ai loro stati iniziali.

Metodo di blocco rigoroso a due fasi

Il sistema di bloccaggio rigoroso a due fasi è quasi simile a 2PL. L'unica differenza è che Strict-2PL non rilascia mai un blocco dopo averlo utilizzato. Mantiene tutti i blocchi fino al punto di commit e li rilascia tutti in una volta al termine del processo.

2PL centralizzato

In Centralized 2 PL, un singolo sito è responsabile del processo di gestione delle serrature. Ha un solo gestore di blocchi per l'intero DBMS.

Copia primaria 2PL

Meccanismo di copia primaria 2PL, molti gestori di blocchi sono distribuiti su siti diversi. Successivamente, un particolare gestore del blocco è responsabile della gestione del blocco per un insieme di elementi di dati. Una volta aggiornata la copia primaria, la modifica viene propagata agli slave.

2PL distribuito

In questo tipo di meccanismo di blocco a due fasi, i gestori dei blocchi vengono distribuiti a tutti i siti. Sono responsabili della gestione dei blocchi per i dati in quel sito. Se nessun dato viene replicato, equivale alla copia primaria 2PL. I costi di comunicazione della 2PL distribuita sono piuttosto superiori rispetto alla copia primaria 2PL

Protocolli basati su timestamp

Protocollo basato su timestamp in DBMS è un algoritmo che utilizza l'ora di sistema o il contatore logico come timestamp per serializzare l'esecuzione di transazioni simultanee. Il protocollo basato su timestamp garantisce che tutte le operazioni di lettura e scrittura in conflitto vengano eseguite in ordine di timestamp.

In questo metodo viene sempre data priorità alla transazione più vecchia. Utilizza l'ora del sistema per determinare il timestamp della transazione. Questo è il protocollo di concorrenza più comunemente utilizzato.

I protocolli basati su lock ti aiutano a gestire l'ordine tra le transazioni in conflitto quando verranno eseguite. I protocolli basati su timestamp gestiscono i conflitti non appena viene creata un'operazione.

Esempio:

Suppose there are there transactions T1, T2, and T3. 
T1 has entered the system at time 0010 
T2 has entered the system at 0020
T3 has entered the system at 0030
Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.

Vantaggi:

  • Le pianificazioni sono serializzabili proprio come i protocolli 2PL
  • Nessuna attesa per la transazione, il che elimina la possibilità di situazioni di stallo!

svantaggi:

La fame è possibile se la stessa transazione viene riavviata e continuamente interrotta

Protocollo basato sulla convalida

Protocollo basato sulla convalida in DBMS noto anche come tecnica di controllo della concorrenza ottimistica è un metodo per evitare la concorrenza nelle transazioni. In questo protocollo vengono aggiornate le copie locali dei dati della transazione anziché i dati stessi, il che si traduce in meno interferenze durante l'esecuzione della transazione.

Il protocollo basato sulla convalida viene eseguito nelle seguenti tre fasi:

  1. Fase di lettura
  2. Fase di convalida
  3. Fase di scrittura

Fase di lettura

Nella fase di lettura, i valori dei dati dal database possono essere letti da una transazione, ma l'operazione di scrittura o gli aggiornamenti vengono applicati solo alle copie dei dati locali, non al database vero e proprio.

Fase di convalida

Nella fase di convalida, i dati vengono controllati per garantire che non vi sia alcuna violazione della serializzabilità durante l'applicazione degli aggiornamenti delle transazioni al database.

Fase di scrittura

Nella Fase di Scrittura gli aggiornamenti vengono applicati al database se la validazione ha esito positivo, altrimenti; gli aggiornamenti non vengono applicati e viene eseguito il rollback della transazione.

Caratteristiche di un buon protocollo di concorrenza

Un meccanismo DBMS ideale per il controllo della concorrenza ha i seguenti obiettivi:

  • Deve essere resistente agli errori del sito e della comunicazione.
  • Consente l'esecuzione parallela di transazioni per ottenere la massima concorrenza.
  • I suoi meccanismi di archiviazione e i metodi di calcolo dovrebbero essere modesti per ridurre al minimo le spese generali.
  • Deve imporre alcuni vincoli sulla struttura delle azioni atomiche delle transazioni.

Sintesi

  • Il controllo della concorrenza è la procedura in DBMS per gestire operazioni simultanee senza conflitti tra loro.
  • Aggiornamenti persi, letture sporche, letture non ripetibili e problemi di riepilogo non corretti sono problemi affrontati a causa della mancanza di controllo della concorrenza.
  • Lock-Based, Two-Phase, Timestamp-Based, Validation-Based sono tipi di protocolli di gestione della concorrenza
  • Il lucchetto può essere Condiviso (S) o Esclusivo (X)
  • Il protocollo di blocco a due fasi, noto anche come protocollo 2PL, richiede che la transazione acquisisca un blocco dopo aver rilasciato uno dei suoi blocchi. Ha 2 fasi di crescita e riduzione.
  • L'algoritmo basato sul timestamp utilizza un timestamp per serializzare l'esecuzione di transazioni simultanee. Il protocollo utilizza il Ora di sistema o conteggio logico come un timestamp.