2010-05-11 10 views
5

Ho un paio di domande riguardanti i blocchi di aggiornamento (U) e le serrature Exclusive (X).Domanda di blocco - Blocco 'U' contro blocco 'X'

1) Sono corretto che un blocco "X" viene inserito in una risorsa quando la risorsa sta per essere aggiornata?

2) Sono un po 'confuso con le serrature a U. Ho corretto che un blocco U viene applicato quando una risorsa viene letta e SQL Server pensa che potrebbe essere necessario aggiornare la risorsa in un secondo momento? Se questo è corretto, un lock 'U' verrebbe applicato solo quando viene eseguita una lettura nel contesto di una transazione? Credo che sto cercando di capire in quali circostanze SQL Server pensa che potrebbe essere necessario aggiornare più tardi una riga che ora legge.

Grazie - Randy

risposta

4

1) Ho ragione che il blocco di una 'X' è messo su una risorsa quando la risorsa è in procinto di ottenere aggiornato?

Sì.

2) Sono un po 'confuso con le serrature a U. Ho corretto che un blocco U viene applicato quando una risorsa viene letta e SQL Server pensa che potrebbe essere necessario aggiornare la risorsa in un secondo momento? Se questo è corretto, un lock 'U' verrebbe applicato solo quando viene eseguita una lettura nel contesto di una transazione? Credo che sto cercando di capire in quali circostanze SQL Server pensa che potrebbe essere necessario aggiornare più tardi una riga che ora legge.

U serrature sono compatibili con i blocchi di lettura, ma non con l'altro, X blocchi non sono compatibili anche con i blocchi di lettura.

U serrature sono posizionati da DML query (UPDATE, DELETE, MERGE) mentre scansione le righe della tabella (senza decisione aggiornare è ancora rilasciato), mentre X blocchi vengono posizionate quando viene presa la decisione di aggiornare la riga.

Nella modalità di isolamento READ COMMITTED, i blocchi di aggiornamento vengono sollevati dopo che il record è stato valutato per essere lasciato così com'è, in modalità di isolamento più elevate vengono conservati fino alla fine della transazione.

+0

@Quassnoi - Sono ancora un po 'confuso sulle serrature a "U". In che modo SQL Server determina che una riga appena letta potrebbe essere aggiornata in futuro? È perché la lettura è stata fatta nel contesto di una transazione? Sto cercando di determinare il motivo per cui a volte viene utilizzato un blocco U anziché un blocco "S". –

+1

@Randy: I ​​blocchi 'U' sono usati per le query' DDL' ('UPDATE',' DELETE', 'MERGE',' SELECT FOR UPDATE'). I blocchi 'S' sono usati per le interrogazioni di sola lettura (' SELECT') – Quassnoi

+0

@Randy: 'REPLACE ('DDL', 'DML')' nel commento sopra – Quassnoi