Je recherchais les différences entre SQL Server READ COMMITTED SNAPSHOT
et les SNAPSHOT
niveaux d'isolement et suis tombé sur la ressource suivante:
Choix des niveaux d'isolement basés sur le contrôle de version des lignes
Pour la plupart des applications, il est recommandé de lire l'isolement validé à l'aide du contrôle de version de ligne par rapport à l'isolement de capture instantanée pour les raisons suivantes:
Il consomme moins d'espace tempdb que l'isolement de cliché.
L'isolement de capture instantanée est vulnérable aux conflits de mise à jour qui ne s'appliquent pas à la lecture de l'isolement validé à l'aide du contrôle de version de ligne. Lorsqu'une transaction s'exécutant sous l'isolement d'instantané lit des données qui sont ensuite modifiées par une autre transaction, une mise à jour par la transaction d'instantané vers les mêmes données provoque un conflit de mise à jour et la transaction se termine et annule. Ce n'est pas un problème avec l'isolation validée en lecture à l'aide du contrôle de version de ligne.
Je suis un peu nouveau sur ces sujets, mais je n'arrive pas à comprendre les deux points du lien ci-dessus.
Pourquoi l'espace tempdb serait-il différent pour ces modes? L'un stocke-t-il des versions plus granulaires que l'autre?
Pourquoi l'isolement de cliché est-il plus vulnérable aux conflits de mise à jour?
la source
Une autre différence entre l'instantané et l'instantané validé en lecture est la suivante.
Lors de la première session
SET TRAN ISOLATION LEVEL INSTANTANÉ DE COMMENCER TRAN SELECT * DE TB1 ..... .....
Dans la deuxième session
Mettre à jour TB1 SET NAME = NAME + 'test' Où id = 1
Lors de la première session
SELECT * FROM TB1 - CECI renverra le nom de la valeur pour ID = 1, pas le nom + 'test' COMMIT TRAN
Dans l'instantané de lecture validée, la première sélection de la session 1 renverra le nom pour id = 1, et la seconde sélection renverra le nom + 'test'.
Ainsi, dans l'isolement d'instantané, SQL SERVER effectue un instantané au début de la transaction et lit à partir de cet instantané pendant toute la transaction.
Dans l'instantané validé en lecture, l'instantané est pris pour chaque instruction SELECT pendant la transaction.
la source