web-dev-qa-db-fra.com

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

Selon l'article de MSDN de Kimberly L. Tripp, "(= //// =)" SQL Server 2005 Isolation de la transaction basée sur la version de version de la version

  • "... Toutes les versions antérieures d'un enregistrement particulier sont chaînées dans une liste liée; et dans le cas des transactions à long terme en ligne , le lien devra être traversé sur chaque accès pour atteindre la version transactionnelle cohérente de la ligne "

ce qui est dans la section "Comprendre la version de la ligne" commune pour suivre les deux "Version de lignes en lecture commis à l'aide de la version de la version" et "Row Versioning dans l'isolement d'instantané d'instantané".

En outre, sur l'exemple de Row-Versioning en raison de modifications est indiqué dans le contexte de multiples mises à jour du même enregistrement par plusieurs transactions (T1, T2, T3) en instantané uniquement.

Au cas où une seule transaction met à jour un enregistrement plusieurs fois (par plusieurs instructions), plusieurs magasins de version seront-ils stockés (liés) ou uniquement celui pris au moment de l'instantané "Image" pris?

Eh bien, la réponse à cette question devrait immédiatement répondre à mes autres questions liées en attente:

11
Fulproof

En cas de mises à jour multiples du même enregistrement dans 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 versions de nouvelles lignes.


Une liste liée des versions de ligne peut survenir comme suit:

  • La transaction T1 dans une transaction instantanée lit une rangée et voit la valeur 'A'.

  • La transaction T2 (sous tout niveau d'isolement) met à jour la valeur de 'A' à 'B' et commettre. Cela génère une version de ligne pour la valeur 'A'.

  • La transaction T3 (sous tout niveau d'isolement) met à jour la valeur de 'B' à 'C' et commettre. Cela génère une version de ligne pour la valeur 'B'. Cette version de ligne se lie vers la version précédente en ligne pour 'A'.

  • La transaction T1 lit la valeur de la ligne en parcourant le lien de la valeur stockée sur la page en cours ('C'), à la version de la ligne 'B', puis à la version "A".

Les versions de lignes sont générées par des modifications de données, qu'il existe une transaction de lecture existante (à tout 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 des versions est créée même sans transaction T1.

11
Paul White 9