Compatibilità tra blocchi (Motore di database)

La compatibilità tra blocchi consente di stabilire se più transazioni possono acquisire blocchi sulla stessa risorsa contemporaneamente. Se una risorsa è già bloccata da un'altra transazione, è possibile autorizzare una nuova richiesta di blocco solo se la modalità di blocco richiesta è compatibile con quella esistente. In caso contrario, la transazione che richiede il nuovo blocco deve attendere il rilascio del blocco esistente oppure la scadenza dell'intervallo di timeout del blocco. Non vi sono, ad esempio, modalità di blocco compatibili con i blocchi esclusivi. In caso di presenza di un blocco esclusivo (X), nessun'altra transazione può acquisire altri blocchi di qualsiasi tipo, ovvero condivisi, di aggiornamento o esclusivi, sulla stessa risorsa fino a quando il blocco esclusivo (X) non viene rilasciato. Se invece è stato applicato a una risorsa un blocco condiviso (S), le altre transazioni possono acquisire un blocco condiviso o un blocco di aggiornamento (U) sullo stesso elemento anche prima del completamento della prima transazione. Le altre transazioni, tuttavia, possono acquisire un blocco esclusivo solo dopo il rilascio del blocco condiviso.

Nella tabella seguente viene illustrata la compatibilità delle modalità di blocco più comuni.

 

Modalità concessa esistente

 

 

 

 

 

Modalità richiesta

IS

S

U

IX

SIX

X

Preventivo condiviso (IS)

No

Condiviso (S)

No

No

No

Aggiornamento (U)

No

No

No

No

Preventivo esclusivo (IX)

No

No

No

No

Condiviso preventivo esclusivo (SIX)

No

No

No

No

No

Blocco esclusivo (X)

No

No

No

No

No

No

Nota

I blocchi preventivi esclusivi (IX) sono compatibili con la modalità di blocco IX perché tale modalità prevede l'intenzione di aggiornamento solo di alcune righe e non di tutte. Sono consentite altre transazioni in cui viene eseguito il tentativo di lettura o aggiornamento di alcune righe, a condizione che non utilizzino righe già in fase di aggiornamento. Se viene eseguito il tentativo di aggiornare la stessa riga da parte di due transazioni, a entrambe viene concesso il blocco IX a livello di tabella e pagina. Un blocco X a livello di riga viene tuttavia concesso a una delle transazioni. L'altra transazione dovrà rimanere in attesa fino alla rimozione di tale blocco.

Matrice completa di compatibilità tra blocchi

Utilizzare la tabella seguente per determinare la compatibilità di tutte le modalità di blocco disponibili in Microsoft SQL Server.

Diagramma che illustra la matrice di compatibilità dei blocchi