PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 17.1 » Internes » Traitement des transactions » Sous-transactions

66.3. Sous-transactions #

Les sous-transactions sont commencées dans des transactions, permettant à de grosses transactions d'être séparées en plusieurs unités plus petites. Les sous-transactions peuvent être validées ou annulées sans affecter leurs transactions parents, permettant ainsi aux transactions parents de continuer. Cela permet une gestion plus facile des erreurs, qui est un problèm fréquent lors du développement d'applications. Le mot sous-transaction est souvent abrégé en subxact.

Les sous-transactions peuvent être démarrées explicitement en utilisant la commande SAVEPOINT, mais peuvent aussi être démarrées d'autres façons, par exemple avec la clause EXCEPTION en PL/pgSQL. PL/Python and PL/TCL acceptent aussi les sous-transactions explicites. Les sous-transactions peuvent aussi être démarrées à partir d'autres sous-transactions. La transaction de niveau haut et ses sous-transactions forment une hiérarchie ou arbre, ce qui explique pour nous faisons référence à la transaction principale avec le terme de transaction de niveau haut.

Si une sous-transaction est affectée à un identifiant de transaction non virtuel, son identifiant de transaction est nommé un « subxid ». Les transactions en lecture seule ne se voient pas affectées de subxid, mais une fois qu'elles écrivent, elles s'en voient affecter un. Une réaction en chaîne réalise une affectation d'identifiants de transactions non virtuels aux parents de la subxid et ainsi de suite jusqu'à la transaction de niveau haut. Nous nous assurons qu'un xid parent est toujours plus petit que n'importe quel subxid enfants.

Le xid du parent immédiat de chaque subxid est enregistré dans le répertoire pg_subtrans. Aucune entrée n'est faite pour les xid de niveau haut vu qu'ils n'ont pas de parent. Aucune entrée n'est fait pour les sous-transactions en lecture seule.

Quand une sous-transaction valide, toutes les sous-transactions enfants validées ayant des subxid seront considérées sous-validées dans cette transaction. Quand une sous-transaction annule, toutes les sous-transactions enfants seront aussi considérées comme annulées.

Quand une transaction deniveau haut avec un xid st validé, toutes les sous-transactions enfants sous-validées sont aussi enregistrées de façon permanente dans le répertoire pg_xact comme étant validées. Si la transaction de niveau haut annule, toutes ses sous-transactions sont aussi annulées, même si elles étaient sous-validées.

Plus chaque transaction conserve de sous-transactions ouvertes (ni annulées ni validées), plus importante sera la surcharge du système de gestion des transactions. Jusqu'à 64 sous-transactions peuvent être placées en cache en mémoire partagée pour chaque processus serveur. Après cela, la charge des entrées/sorties disques augmente significativement à cause des recherches supplémentaires dans les entrées subxid de pg_subtrans.