ID transazione

Gli ID delle transazioni (xid) sono di natura sequenziale. Ogni record del database include due valori xid:
  • ID della transazione che ha creato il record
  • Un ID di transazione che ha cancellato il record (che è impostato a 0 se non è stato cancellato)

Quando il sistema aggiorna un record, cancella il record originale, inserisce un nuovo record e conserva il rowid.

Poiché il sistema non aggiorna i record presenti sul disco, l'integrità dei dati è preservata (scrittura una volta) e le operazioni di rollback e ripristino sono semplificate e accelerate.

Quando si esegue una query (o un'operazione di backup), il sistema consente alla query di accedere a qualsiasi record creato, ma non eliminato, prima dell'inizio della transazione. Poiché i valori xid sono sequenziali, il sistema confronta i valori xid di creazione e xid di cancellazione.

L'eccezione è che quando una transazione inizia, genera un elenco di invisibilità di qualsiasi altra transazione attiva (che avrebbe quindi un valore xid inferiore). La transazione ignora tutti i record con un valore xid corrispondente a create e include tutti i record con un valore xid corrispondente a delete.

Un xid è un valore intero di 8 byte, di cui 48 bit sono significativi. Nelle nuove installazioni, il valore iniziale di xid è 1.024. Il sistema memorizza il prossimo valore xid disponibile nel file " /nz/data/xid.

La dimensione dell'xid consente oltre 100 trilioni di ID transazione, che richiederebbero oltre 4000 anni per essere utilizzati al ritmo di una transazione al millisecondo. Nella pratica, è probabile che gli ID delle transazioni vengano generati a un ritmo più lento e richiedano più tempo per essere esauriti.