En cas de mises à jour multiples du même enregistrement en une seule transaction, combien de versions sont stockées?

11

Selon un article MSDN de Kimberly L. Tripp, Neal Graves " SQL Server 2005 Row Versioning-Based Transaction Isolation

  • "... Toutes les versions antérieures d'un enregistrement particulier sont enchaînées dans une liste chaînée; et dans le cas de transactions basées sur le versionnage de lignes de longue durée, le lien devra être traversé à chaque accès pour atteindre la version transactionnellement cohérente de la ligne"

qui se trouve dans la section "Comprendre le versionnage de lignes" courante pour suivre à la fois les sections "Versionnement de lignes en lecture validée à l'aide du versionnement de lignes" et "Versionnement de lignes dans l'isolement de capture instantanée".

Plus loin, l'exemple de version de ligne en raison de modifications est donné dans le contexte de plusieurs mises à jour du même enregistrement par plusieurs transactions (T1, T2, T3) dans SNAPSHOT uniquement.

Dans le cas où une seule transaction met à jour un enregistrement plusieurs fois (par plusieurs instructions), plusieurs magasins de versions seront-ils stockés (liés) ou seulement celui pris au moment de la prise de l '"image" INSTANTANÉE?

Eh bien, la réponse à cette question devrait immédiatement répondre à mes autres questions connexes en suspens:

Fulproof
la source

Réponses:

11

En cas de mises à jour multiples du même enregistrement en une seule transaction, combien de versions sont stockées?

Juste un.

La première mise à jour de la ligne génère une version de ligne et verrouille exclusivement la ligne. Les mises à jour ultérieures de la même ligne dans la même transaction ne génèrent pas de nouvelles versions de ligne.


Une liste liée de versions de lignes peut apparaître comme suit:

  • La transaction T1 dans une transaction INSTANTANÉE lit une ligne et voit la valeur «a».

  • La transaction T2 (sous n'importe quel niveau d'isolement) met à jour la valeur de «a» à «b» et valide. Cela génère une version de ligne pour la valeur «a».

  • La transaction T3 (sous n'importe quel niveau d'isolement) met à jour la valeur de «b» à «c» et valide. Cela génère une version de ligne pour la valeur «b». Cette version de ligne est liée à la version de ligne précédente pour «a».

  • La transaction T1 lit la valeur de ligne en parcourant le lien de la valeur stockée sur la page actuelle («c») à la version de ligne «b», puis de nouveau à la version de ligne «a».

Les versions de ligne sont générées par des modifications de données, qu'il existe ou non une transaction de lecture (à n'importe quel niveau d'isolement). Les versions peuvent ne jamais être nécessaires, mais elles sont toujours générées - la même liste liée de versions est créée même sans la transaction T1.

Paul White 9
la source