web-dev-qa-db-fra.com

"Lorsqu'une connexion est fermée et retournée à la piscine, le niveau d'isolement de la dernière instruction de niveau d'isolation de transaction est conservé"?

L'article en ligne MSDN " isolement d'instantané dans SQL Server " States:

  • "Un niveau d'isolement a une portée à l'échelle de la connexion et une fois défini pour une connexion avec l'instruction de niveau d'isolation de la transaction définie, il reste en vigueur jusqu'à ce que la connexion soit fermée ou un autre niveau d'isolation est défini. = Lorsqu'une connexion est fermée et retourné à la piscine, le niveau d'isolation de la dernière instruction de niveau d'isolation de transaction défini est conservé. Les connexions suivantes réutilisent une connexion groupée Utilisez le niveau d'isolement qui était en vigueur au moment où la connexion est regroupée "

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

Ensuite, si "le niveau d'isolement de la dernière instruction de niveau d'isolation de transaction défini est conservé" Après la fermeture de la connexion et le renvoyer à un pool, comment il faut comprendre:

  • que le niveau d'isolement par défaut aura une valeur arbitraire (différentes connexions dans le pool auront des niveaux d'isolation différents et sa valeur dépendra de la connexion en cours de rompe)?
  • ou toutes les valeurs par défaut sur toutes les connexions dans la piscine seront modifiées pour la dernière fois? Mais encore une fois assez inconnu avant la main?
8
Fulproof

Une connexion de la piscine aura le niveau d'isolement défini par le dernier client pour utiliser cette connexion. Oui, c'est vraiment ce effrayant.

Le long et le court est que si vous modifiez le niveau d'isolement d'une connexion, vous devez explicitement le régler sur READ COMMITTED Avant la fermeture. Il est préférable de déclarer explicitement votre niveau d'isolement requis au début de tout lot, afin de vous assurer que votre code n'est pas affecté par quelqu'un d'autre d'autre être bâclé et le renvoyer à la valeur par défaut à la fin.

Ce comportement, tout en dérange, est apparemment par design .

14
Mark Storey-Smith

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

Pas pour moi, mais je peux voir qu'il y a d'autres moyens de le lire. Si vous souhaitez que la documentation mise à jour pour le rendre plus claire, le lieu de demande approprié pour la demander est sur Microsoft Connect . Les personnes ici ne maintiennent pas la documentation Microsoft.

Que le niveau d'isolement par défaut aura une valeur arbitraire (différentes connexions dans le pool auront des niveaux d'isolation différents et sa valeur dépendra de la connexion en cours de rompe) ?

Si vous réutilisez une connexion groupée, oui, le niveau d'isolement "préexistant" est celui qui était en vigueur lorsque la connexion groupée a été fermé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 la piscine seront modifiées pour la dernière fois? Mais encore une fois assez inconnu avant la main ?

Non.

5
Paul White 9

SQL Server 2014 réinitialise maintenant le niveau d'isolement des connexions groupées pour la plupart des versions de protocole TDS. Les versions SQL Server précédentes n'ont pas réinitialisé le niveau d'isolation.

3
usr