In caso di più aggiornamenti dello stesso record in una singola transazione, quante versioni vengono archiviate?


11

Secondo l'articolo MSDN di Kimberly L. Tripp, l' isolamento delle transazioni basato sulle versioni di SQL Server 2005 Row di Neal Graves

  • "... Tutte le versioni precedenti di un determinato record sono concatenate in un elenco collegato e, nel caso di transazioni basate sul controllo delle versioni di riga di lunga durata, il collegamento dovrà essere attraversato su ciascun accesso per raggiungere la versione transazionale coerente di la riga"

che si trova nella sezione "Informazioni sul controllo delle versioni delle righe" comune per seguire le sezioni "Controllo delle versioni delle righe in commit con lettura delle versioni delle righe" e "Controllo delle versioni delle righe nell'isolamento dello snapshot".

Inoltre, l'esempio del versioning delle righe dovuto alle modifiche viene fornito nel contesto di più aggiornamenti dello stesso record da più transazioni (T1, T2, T3) solo in SNAPSHOT.

Nel caso in cui una sola transazione aggiorni un record più volte (con più istruzioni), verranno memorizzati più archivi di versioni (collegati) o sarà presa solo quella presa al momento della "immagine" SNAPSHOT?

Bene, la risposta a questa domanda dovrebbe rispondere immediatamente alle mie altre domande correlate in sospeso:

Risposte:


11

In caso di più aggiornamenti dello stesso record in una singola transazione, quante versioni sono archiviate?

Solo uno.

Il primo aggiornamento della riga genera una versione della riga e blocca esclusivamente la riga. Gli aggiornamenti successivi alla stessa riga all'interno della stessa transazione non generano nuove versioni di riga.


Un elenco collegato di versioni di riga può presentarsi come segue:

  • La transazione T1 in una transazione SNAPSHOT legge una riga e vede il valore "a".

  • La transazione T2 (sotto qualsiasi livello di isolamento) aggiorna il valore da "a" a "b" e commette. Questo genera una versione di riga per il valore 'a'.

  • La transazione T3 (sotto qualsiasi livello di isolamento) aggiorna il valore da "b" a "c" e commette. Questo genera una versione di riga per il valore 'b'. Questa versione della riga si collega alla versione della riga precedente per "a".

  • La transazione T1 legge il valore della riga attraversando il collegamento dal valore memorizzato nella pagina corrente ('c'), alla versione di riga 'b', e quindi alla versione di ritorno a riga 'a'.

Le versioni delle righe vengono generate dalle modifiche ai dati indipendentemente dal fatto che esista una transazione di lettura (a qualsiasi livello di isolamento). Le versioni potrebbero non essere mai necessarie, ma vengono comunque generate: lo stesso elenco di versioni collegato viene creato anche senza la transazione T1.

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.