it-swarm.it

Che cos'è il blocco e come succede?

Ho provato a trovare alcune informazioni sul blocco in SQL Server, ma non sono riuscito a trovare una spiegazione concisa su cosa sia e come accada. Potresti per favore illuminarmi?

20
jrara

Analogie

A volte aiuta a usare le analogie lontano dai computer.

Diciamo che hai una palla e due bambini. Solo un bambino può avere la palla alla volta. Tuttavia, se uno dei bambini prende la palla e non la lascia andare perché è distratto (guardando la TV, per esempio), allora l'altro bambino non può giocare con la palla.

L'altro figlio è bloccato da quella risorsa.

Se confrontiamo questo con la TV, ad esempio, diversi bambini possono guardare la TV in qualsiasi punto.

Serrature

Se passiamo al mondo dei database, vediamo che ci sono diversi modi di usare le risorse (proprio come i nostri due esempi sopra). Siamo in grado di eseguire "letture" o di "scritture".

Quando vogliamo leggere i dati, non c'è motivo per cui anche gli altri non possano leggere i dati, proprio come due persone che guardano la TV. Tuttavia, se vogliamo scrivere i dati, dobbiamo assicurarci che nessun altro li stia guardando. Se lo stanno leggendo mentre lo scriviamo, avranno letture "sporche". (Significato, vedranno i dati parzialmente scritti, il che non sarà valido.)

Al fine di garantire che queste letture sporche non si verifichino mai, abbiamo due tipi primari di blocchi, i blocchi di lettura e quelli esclusivi.

Blocco lettura

È possibile avere più connessioni diverse che leggono dalla stessa origine dati in qualsiasi momento. Ma per assicurare che nessuno cambi quei dati mentre li leggono, eliminano un blocco di lettura.

Una volta che una connessione ha un blocco di lettura su un dato, tutte le altre connessioni devono attendere fino al rilascio del blocco di lettura prima di poter scrivere i dati. Altri, tuttavia, possono eliminare i blocchi di lettura per conto proprio sullo stesso dato.

Blocco esclusivo

Se una connessione desidera aggiornare/inserire/eliminare un dato, devono rimuovere un blocco esclusivo. Ciò impedisce a qualsiasi altra connessione di rimuovere anche un blocco sui dati (rendendo il blocco esclusivo per quella connessione).

Quando una connessione ha un blocco esclusivo sui dati, nessuna altra connessione può leggere dai dati. Questo aiuta a prevenire letture sporche assicurando che nessuno possa leggere i dati mentre vengono scritti.

di blocco

"Blocco" è semplicemente un termine che significa che una connessione è in possesso di un blocco su una risorsa quando un'altra connessione vuole leggere o scrivere su di essa. Non significa necessariamente che la connessione del proprietario non lo rilasci, ma solo che al momento lo sta trattenendo.

Confronta questo con il caso con un bambino che tiene la palla. Il bambino che tiene la palla sta impedendo a tutti gli altri bambini di tenere la palla.

Deadlock

So che non l'hai chiesto, ma è solo un altro passo per arrivare ai deadlock (ed è direttamente correlato al blocco).

I deadlock possono verificarsi quando si hanno due connessioni ognuna con un blocco, ma si vogliono risorse a vicenda. In questo scenario, è come due bambini che ognuno ha una palla, ma vuole la palla dell'altro.

Come i bambini, queste connessioni non sono affatto disposte a condividere. Ogni connessione deve avere accesso a entrambe le risorse per poter continuare. Tuttavia, sono in uno stato di blocco permanente. In questo stato, il genitore (DBMS) deve entrare e scegliere un perdente in modo che uno dei figli (connessioni) possa avere accesso a entrambe le risorse.

Una volta effettuata la connessione "vincente", rilascia le risorse e quindi l'altra connessione ("perdente") può riprovare ad accedere a entrambe le risorse.

Quindi, il concetto di deadlock è dove hai due risorse che si bloccano a vicenda.


Qui , puoi leggere ulteriori informazioni su tutti i diversi tipi di blocchi che SQL Server ha da offrire e sulle diverse risorse che possono causare blocchi/deadlock. L'articolo è vecchio, ma si applica ancora per SQL Server 2000 fino al 2008 R2. (Esistono alcuni altri tipi di blocchi aggiunti alle versioni successive di SQL Server, ma ciò fornirà un punto di partenza.)

23
Richard

Grande spiegazione di Richard, ma volevo solo aggiungere collegamenti alla documentazione ufficiale. Questi argomenti sono stati scritti per SQL Server 2000, ma molti dei concetti rimangono gli stessi oggi:

Capire ed evitare il blocco

Comprensione del blocco in SQL Server

Modifica - alcune aggiunte:

Tutti e 3 sono autori e/o MVP di SQL Server molto noti.

5
Aaron Bertrand