Blocchi condivisi eseguiti in Isolamento istantanea di commit della lettura (RCSI)


9

Sto vedendo attese di blocchi condivisi ( LCK_M_S) quando si utilizza RCSI. La mia comprensione è che ciò non dovrebbe accadere poiché SELECTsnon richiedono blocchi condivisi quando si utilizza RCSI.

Come posso vedere i lucchetti condivisi? È a causa di chiavi esterne?


posso anche chiedere, il server sql posiziona i blocchi condivisi sui record se non c'è indice anche se read_committed_snapshot è attivato?
grassbl8d,

Risposte:


13

Come posso vedere i lucchetti condivisi? È a causa di chiavi esterne?

Sì. SQL Server ripristina l'implementazione bloccante del livello di isolamento con commit di lettura quando si accede a una tabella allo scopo di convalidare i vincoli di chiave esterna. Questo è necessario per correttezza e non può essere disabilitato.

Il comportamento si applica solo alle dichiarazioni di modifica dei dati. I blocchi condivisi vengono eseguiti solo quando si controllano i dati relativi alla chiave esterna. Altri accessi ai dati nello stesso piano di esecuzione possono continuare a utilizzare il controllo delle versioni delle righe.

In caso contrario, le istruzioni di modifica dei dati riportate sotto RCSIpotrebbero finire per violare il vincolo di chiave esterna poiché il controllo di integrità ha utilizzato dati non aggiornati (con versione).

Sfortunatamente, al momento non esiste un modo supportato per vedere questa modifica nel comportamento di blocco in un piano di esecuzione. È possibile visualizzare i suggerimenti di blocco interni quando è attivo il flag di traccia 8607.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.