«Lorsqu'une connexion est fermée et renvoyée au pool, le niveau d'isolement de la dernière instruction SET TRANSACTION ISOLATION LEVEL est conservé»?


8

L'article en ligne MSDN « Isolation de capture instantanée dans SQL Server » indique:

  • «Un niveau d'isolement a une portée à l'échelle de la connexion et une fois défini pour une connexion avec l'instruction SET TRANSACTION ISOLATION LEVEL, il reste en vigueur jusqu'à ce que la connexion soit fermée ou qu'un autre niveau d'isolement soit défini. Lorsqu'une connexion est fermée et renvoyée au pool , le niveau d'isolement de la dernière instruction SET TRANSACTION ISOLATION LEVEL est conservé . Les connexions suivantes réutilisant une connexion regroupée utilisent le niveau d'isolement qui était en vigueur au moment où la connexion est regroupée "

N'est-ce pas un paragraphe contradictoire ("jusqu'à" vs "retenu")?

Ensuite, si "le niveau d'isolement de la dernière instruction SET TRANSACTION ISOLATION LEVEL est conservé " après la fermeture de la connexion et son retour dans un pool, comment il doit être compris:

  • que le niveau d'isolement par défaut aura une valeur arbitraire (différentes connexions dans le pool auront différents niveaux d'isolement, et sa valeur dépendra de la connexion étant rouverte)?
  • ou toutes les valeurs par défaut sur toutes les connexions dans votre pool seront modifiées pour durer? mais encore une fois assez inconnu à l'avance?

Réponses:


14

Une connexion à partir du pool aura le niveau d'isolement défini par le dernier client à utiliser cette connexion. Oui, c'est vraiment effrayant.

Le long et le court de celui-ci est que si vous modifiez le niveau d'isolement d'une connexion, vous devez le rétablir explicitement READ COMMITTEDavant de fermer. Il vaut mieux déclarer explicitement votre niveau d'isolement requis au début de tout lot, pour vous assurer que votre code n'est pas affecté par une autre personne bâclée, et le restaurer à la valeur par défaut à la fin.

Ce comportement, bien que déconcertant, est apparemment intentionnel .


Jamais vu ces «doit explicitement» et «Mieux vaut explicitement» dans les articles MSDN, livres, blogs, documents, etc.
Fulproof

5

N'est-ce pas un paragraphe contradictoire ("jusqu'à" vs "retenu")?

Pas pour moi, mais je peux voir qu'il y a d'autres façons de le lire. Si vous souhaitez que la documentation soit mise à jour pour la rendre plus claire, le bon endroit pour en faire la demande est sur Microsoft Connect . Les personnes ici ne gèrent pas la documentation Microsoft.

que le niveau d'isolement par défaut aura une valeur arbitraire (différentes connexions dans le pool auront différents niveaux d'isolement, et sa valeur dépendra de la connexion étant rouverte)?

Si vous réutilisez une connexion regroupée, alors oui, le niveau d'isolement "préexistant" est celui qui était en vigueur lors de la dernière fermeture de la connexion regroupée. La meilleure pratique consiste à définir explicitement le niveau d'isolement nécessaire lors de la connexion.

ou toutes les valeurs par défaut sur toutes les connexions dans le pool seront modifiées pour durer? mais encore une fois assez inconnu à l'avance?

Non.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.