ID de transacción

Los ID de transacción (xids) son en esencia secuenciales. Cada registro de base de datos incluye dos valores xid:
  • El ID de transacción que ha creado el registro
  • Un ID de transacción que ha eliminado el registro (que se establece en 0 si no se ha eliminado)

Cuando el sistema actualiza un registro, elimina el registro original, inserta un registro nuevo y preserva el id de fila.

Dado que el sistema no actualiza registros in situ en el disco, la integridad de los datos está preservada (escritura una sola vez) y las operaciones de reversión y recuperación se simplifican y agilizan.

Cuando ejecute una consulta (o una operación de copia de seguridad), el sistema permitirá a la consulta acceder a cualquier registro que se haya creado, pero no eliminado, antes de que empezara esta transacción. Dado que los valores xid son secuenciales, el sitema compara los valores de create xid de creación y delete xid para realizar la tarea.

La excepción es que cuando comienza la transacción, genera una lista de invisibilidad de cualquier otra transacción activa (que, por lo tanto, tendrá un valor xid menor). La transacción ignora cualquier registro con un valor create xid coincidente e incluirá cualquier registro con un valor delete xid coincidente.

Un xid es un valor entero de 8 bits, del cual son significativos 48 bits. En las instalaciones nuevas, el valor xid inicial es 1.024. El sistema almacena el siguiente valor xid disponible en el archivo /nz/data/xid.

El tamaño del xid permite más de 100 trillones de IDs de transacción, que tardarían más de 4.000 años en agotarse a una frecuencia de una transacción por milisegundo. En la práctica, es probable que los ID de transacción se generen a un ritmo más lento y tarden más en agotarse.