Perché gli isolamenti di coda di coda utilizzano un elenco collegato di versioni del record? [Chiuso
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"
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:
Nessuna soluzione corretta