Domanda

Cercando di comprendere meglio gli isolati di transazione basati sulla versioni di row-weioning in SQL Server ...

Secondo Kimberly L. Tripp, Neal Graves "SQL Server 2005 Isolamento delle transazioni basate su versioni di versioni riga":

  • "... Quando un record in una tabella o in un indice viene modificato, il nuovo record è timbrato con" sequence_number "della transazione che esegue la modifica"

Il che ha perfettamente senso: quando un ID transazione è collegato a un cambio di record.

Quello che non riesco a capire è, dalla stessa fonte:

  • "... Tutte le versioni precedenti di un record particolare sono incatenate in un elenco collegato"

enter image description here

Perché c'è bisogno in un elenco collegato, vale a dire collegare le modifiche dello stesso record?

AGGIORNARE:

Come affermato da Remus Resanu in La sua risposta a "L'isolamento dell'istantanea ti dà solo ciò che è stato commesso? (E domande generali di isolamento dell'istantanea.)":

  • "L'istantanea ti fornirà i dati commessi Al momento è stata presa l'istantanea. Questo momento significa o quando hai emesso inizi trans se usi un vero livello di isolamento dell'istantanea, o nel momento in cui la tua istruzione è iniziata se si utilizza read_comphited_snapshot rcsi "

In altre parole, è necessario conservare più versioni di riga di un record per transazioni multiple/diverse (con indicatori/collegamenti corrispondenti), a cui è possibile accedere direttamente a una copia corrispondente presa quando è stata presa l'istantanea (sebbene più per più per più transazioni ma quella singola per una transazione corrispondente). Questo è in perfetto accordo con Spiegazione che RCSI assume meno spazio in tempdb ma contraddice la dichiarazione (o rende ambiguo alla mia comprensione), riferendosi a Sia RCSI che Snapshot (Nota, che non sta facendo alcuna differenza tra RCSI e Snapshot in base al suo contesto utilizzato in quell'articolo):

  • "Tutte le versioni precedenti di un record particolare sono incatenate in un elenco collegato; e nel caso delle transazioni basate su versioni di riga di lunga durata, il collegamento dovrà essere attraversato su ogni accesso per raggiungere la versione transazionale coerente della riga. I record di versione devono essere conservati nell'archivio di versione solo fintanto che ci sono query basate su versioni di riga che potrebbero essere interessate a loro "

Quest'ultimo suona come lo spazio richiesto è sempre lo stesso sia per RCSI che per Snapshot?!
e è dichiarato contraddittorio in diversi articoli MSDN

Sottoceria:

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top