ID transaction

Les identifiants de transaction (xids) sont de nature séquentielle. Chaque enregistrement de la base de données comprend deux valeurs xid :
  • L'identifiant de la transaction qui a créé l'enregistrement
  • L'identifiant de la transaction qui a supprimé l'enregistrement (qui prend la valeur 0 s'il n'a pas été supprimé)

Lorsque le système met à jour un enregistrement, il supprime l'enregistrement original, insère un nouvel enregistrement et conserve l'identifiant de ligne.

Comme le système ne met pas à jour les enregistrements en place sur le disque, l'intégrité des données est préservée (écriture unique) et les opérations de retour en arrière et de récupération sont simplifiées et accélérées.

Lorsque vous exécutez une requête (ou une opération de sauvegarde), le système permet à la requête d'accéder à tout enregistrement créé, mais non supprimé, avant le début de la transaction. Les valeurs xid étant séquentielles, le système compare les valeurs xid de création et xid de suppression.

L'exception est que lorsqu'une transaction commence, elle génère une liste d'invisibilité de toutes les autres transactions actives (qui auraient donc une valeur xid inférieure). La transaction ignore tous les enregistrements dont la valeur xid de création correspond et inclut tous les enregistrements dont la valeur xid de suppression correspond.

Un xid est une valeur entière de 8 octets, dont 48 bits sont significatifs. Dans les nouvelles installations, la valeur initiale du xid est de 1 024. Le système enregistre la prochaine valeur xid disponible dans le fichier " /nz/data/xid.

La taille du xid permet de créer plus de 100 billions d'identifiants de transaction, ce qui prendrait plus de 4 000 ans à épuiser au rythme d'une transaction par milliseconde. Dans la pratique, les identifiants de transaction sont susceptibles d'être générés à un rythme plus lent et leur épuisement prendrait plus de temps.