Cos'è il controllo della concorrenza?
Il controllo della concorrenza in Database Management System è una procedura per la gestione di operazioni simultanee senza conflitti tra loro. Assicura che le transazioni del database vengano eseguite simultaneamente e accuratamente per produrre risultati corretti senza violare l'integrità dei dati del rispettivo database.
L'accesso simultaneo è abbastanza semplice se tutti gli utenti stanno solo leggendo i dati. Non c'è modo che possano interferire l'uno con l'altro. Sebbene per qualsiasi database pratico, avrebbe un mix di operazioni di lettura e scrittura e quindi la concorrenza è una sfida.
DBMS Concurrency Control viene utilizzato per risolvere tali conflitti, che si verificano principalmente con un sistema multiutente. Pertanto, il controllo della concorrenza è l'elemento più importante per il corretto funzionamento di un sistema di gestione del database in cui vengono eseguite contemporaneamente due o più transazioni di database, che richiedono l'accesso agli stessi dati.
In questo tutorial imparerai
- Cos'è il controllo della concorrenza?
- Potenziali problemi di concorrenza
- Perché utilizzare il metodo di concorrenza?
- Protocolli di controllo della concorrenza
- Protocolli basati su blocco
- Protocollo Two Phase Locking (2PL)
- Protocolli basati su timestamp
- Protocollo basato sulla convalida
- Caratteristiche del protocollo di buona concorrenza
Potenziali problemi di concorrenza
Ecco alcuni problemi che probabilmente dovrai affrontare durante l'utilizzo del metodo di controllo della concorrenza DBMS:
- Gli aggiornamenti persi si verificano quando più transazioni selezionano la stessa riga e aggiornano la riga in base al valore selezionato
- Problemi di dipendenza non confermata si verificano quando la seconda transazione seleziona una riga che viene aggiornata da un'altra transazione ( lettura sporca )
- La lettura non ripetibile si verifica quando una seconda transazione tenta di accedere più volte alla stessa riga e legge dati diversi ogni volta.
- Il problema di riepilogo non corretto si verifica quando una transazione assume il riepilogo sul valore di tutte le istanze di un elemento di dati ripetuto e la seconda transazione aggiorna poche istanze di quell'elemento di dati specifico. In quella situazione, il riepilogo risultante non riflette un risultato corretto.
Perché utilizzare il metodo di concorrenza?
Motivi per l'utilizzo del metodo di controllo della concorrenza è DBMS:
- Per applicare l'isolamento tramite l'esclusione reciproca tra transazioni in conflitto
- Per risolvere i problemi di conflitto di lettura-scrittura e scrittura-scrittura
- Per preservare la coerenza del database preservando costantemente gli ostacoli all'esecuzione
- Il sistema deve controllare l'interazione tra le transazioni simultanee. Questo controllo si ottiene utilizzando schemi di controllo simultaneo.
- Il controllo della concorrenza aiuta a garantire la serializzabilità
Esempio
Supponiamo che due persone che vanno ai chioschi elettronici contemporaneamente per acquistare un biglietto del cinema per lo stesso film e lo stesso orario di spettacolo.
Tuttavia, è rimasto solo un posto per lo spettacolo cinematografico in quel particolare teatro. 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. 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 consentita e la quantità di overhead che impongono. Di seguito sono riportate le tecniche di controllo della concorrenza in DBMS:
- Protocolli basati su blocco
- Protocollo di blocco a due fasi
- Protocolli basati su timestamp
- Protocolli basati sulla convalida
Protocolli basati su blocco
I protocolli basati sul blocco in DBMS sono un meccanismo in cui una transazione non può leggere o scrivere i dati finché non acquisisce un blocco appropriato. I protocolli basati sul blocco aiutano ad eliminare il problema della concorrenza nel DBMS per le transazioni simultanee bloccando o isolando una particolare transazione 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 nel DBMS aiutano a sincronizzare l'accesso agli elementi del database tramite transazioni simultanee.
Tutte le richieste di blocco vengono effettuate al gestore del controllo della concorrenza. Le transazioni procedono solo una volta che la richiesta di blocco viene concessa.
Blocchi binari: un blocco binario su un elemento di dati può essere bloccato o sbloccato.
Condiviso / esclusivo: questo tipo di meccanismo di blocco separa i blocchi in DBMS in base al loro utilizzo. Se un blocco viene acquisito su un elemento di 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 di dati può essere condiviso tra le transazioni. Questo perché non avrai mai il permesso di aggiornare i dati sull'elemento di dati.
Ad esempio, si consideri un caso in cui due transazioni leggono il saldo del conto di una persona. Il database consentirà loro di leggere inserendo un blocco condiviso. Tuttavia, se un'altra transazione desidera aggiornare il saldo di quell'account, il blocco condiviso lo impedisce fino al termine del processo di lettura.
2. Blocco esclusivo (X):
Con il blocco esclusivo, un elemento di dati può essere letto e scritto. Questo è esclusivo e non può essere conservato contemporaneamente sullo stesso elemento di dati. X-lock è 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 desidera leggere o scrivere, il blocco esclusivo impedisce questa operazione.
3. Protocollo di blocco semplicistico
Questo tipo di protocolli basati sul blocco consente alle transazioni di ottenere un blocco su ogni oggetto prima di iniziare l'operazione. Le transazioni possono sbloccare l'elemento dati dopo aver terminato l'operazione di "scrittura".
4. Pre-rivendicazione di blocco
Il protocollo di blocco pre-rivendicazione aiuta a valutare le operazioni e creare un elenco di elementi di dati richiesti che sono necessari per avviare un processo di esecuzione. Nella situazione in cui vengono concessi tutti i blocchi, la transazione viene eseguita. Dopodiché, tutti i blocchi vengono rilasciati al termine di tutte le operazioni.
Fame
La fame è la situazione in cui una transazione deve attendere un periodo indefinito per acquisire un blocco.
Di seguito sono riportati i motivi della fame:
- In attesa, lo schema per gli articoli bloccati non è 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 o più di due processi sono in attesa della risorsa in una catena circolare.
Protocollo di blocco a due fasi
Il protocollo Two Phase Locking, noto anche come protocollo 2PL, è un metodo di controllo della concorrenza in DBMS che garantisce la serializzabilità applicando un blocco ai dati della transazione che blocca altre transazioni per accedere simultaneamente agli stessi dati. Il protocollo Two Phase Locking aiuta ad eliminare il problema della concorrenza nel DBMS.
Questo protocollo di blocco divide la fase di esecuzione di una transazione in tre parti differenti.
- 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 blocchi. Quando una transazione rilascia il suo primo blocco, inizia la terza fase.
- In questa terza fase, la transazione non può richiedere nuovi blocchi. Invece, rilascia solo i blocchi acquisiti.
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 blocchi ma non può rilasciare alcun blocco.
- Fase di restringimento : in questa fase, una transazione può rilasciare blocchi ma non ottenere alcun nuovo blocco
È vero che il protocollo 2PL offre la serializzabilità. Tuttavia, non garantisce che i deadlock non si verifichino.
Nel diagramma sopra riportato, puoi vedere che i rilevatori di deadlock locali e globali stanno cercando i deadlock e li risolvono ripristinando le transazioni ai loro stati iniziali.
Metodo di bloccaggio a due fasi rigoroso
Il sistema di bloccaggio a due fasi rigoroso è 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 rilascia tutti i blocchi in una volta sola quando il processo è finito.
Centralizzato 2PL
In Centralized 2 PL, un singolo sito è responsabile del processo di gestione dei blocchi. Ha un solo gestore di blocco per l'intero DBMS.
Copia principale 2PL
Meccanismo di copia primaria 2PL, molti gestori di blocchi sono distribuiti a siti diversi. Successivamente, un particolare gestore di blocchi è responsabile della gestione del blocco per un insieme di elementi di dati. Quando la copia primaria è stata aggiornata, la modifica viene propagata agli slave.
2PL distribuito
In questo tipo di meccanismo di blocco a due fasi, i gestori di blocco vengono distribuiti a tutti i siti. Sono responsabili della gestione dei blocchi per i dati in quel sito. Se nessun dato viene replicato, è equivalente alla copia primaria 2PL. I costi di comunicazione di 2PL distribuito sono molto più alti della copia primaria 2PL
Protocolli basati su timestamp
Il protocollo basato sul 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 un ordine di timestamp.
La vecchia transazione ha sempre la priorità in questo metodo. Utilizza l'ora di sistema per determinare il timestamp della transazione. Questo è il protocollo di concorrenza più comunemente utilizzato.
I protocolli basati sul blocco 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 0010T2 has entered the system at 0020T3 has entered the system at 0030Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.
Vantaggi :
- Gli orari sono serializzabili proprio come i protocolli 2PL
- Nessuna attesa per la transazione, che elimina la possibilità di deadlock!
Svantaggi:
La fame è possibile se la stessa transazione viene riavviata e continuamente interrotta
Protocollo basato sulla convalida
Il protocollo basato sulla convalida in DBMS, noto anche come Optimistic Concurrency Control Technique, è 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 una minore interferenza durante l'esecuzione della transazione.
Il protocollo basato sulla convalida viene eseguito nelle seguenti tre fasi:
- Fase di lettura
- Fase di convalida
- 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 effettivo.
Fase di convalida
Nella fase di convalida, i dati vengono controllati per garantire che non vi siano violazioni 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 convalida ha esito positivo, altrimenti; gli aggiornamenti non vengono applicati e la transazione viene annullata.
Caratteristiche del protocollo di buona concorrenza
Un meccanismo DBMS di controllo della concorrenza ideale ha i seguenti obiettivi:
- Deve essere resiliente al sito e agli errori di comunicazione.
- Consente l'esecuzione parallela di transazioni per ottenere la massima concorrenza.
- I suoi meccanismi di archiviazione e metodi di calcolo dovrebbero essere modesti per ridurre al minimo il sovraccarico.
- Deve imporre alcuni vincoli alla struttura delle azioni atomiche delle transazioni.
Sommario
- Il controllo della concorrenza è la procedura in DBMS per la gestione di operazioni simultanee senza conflitti tra loro.
- Aggiornamenti persi, lettura sporca, lettura non ripetibile e problema di riepilogo non corretto sono problemi affrontati a causa della mancanza di controllo della concorrenza.
- I tipi di protocolli di gestione della concorrenza sono basati su blocco, a due fasi, basati su timestamp e basati su convalida
- Il blocco potrebbe 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 restringimento.
- L'algoritmo basato sul timestamp utilizza un timestamp per serializzare l'esecuzione di transazioni simultanee. Il protocollo utilizza l' ora di sistema o il conteggio logico come timestamp.