"Wenn eine Verbindung geschlossen und an den Pool zurückgegeben wird, bleibt die Isolationsstufe der letzten Anweisung SET TRANSACTION ISOLATION LEVEL erhalten."


8

Der MSDN-Online-Artikel " Snapshot-Isolation in SQL Server " lautet:

  • "Eine Isolationsstufe hat einen verbindungsweiten Bereich. Sobald sie für eine Verbindung mit der Anweisung SET TRANSACTION ISOLATION LEVEL festgelegt wurde, bleibt sie wirksam, bis die Verbindung geschlossen oder eine andere Isolationsstufe festgelegt wird. Wenn eine Verbindung geschlossen und an den Pool zurückgegeben wird wird die Isolationsstufe der letzten Anweisung SET TRANSACTION ISOLATION LEVEL beibehalten . Nachfolgende Verbindungen, die eine gepoolte Verbindung wiederverwenden, verwenden die Isolationsstufe, die zum Zeitpunkt des Zusammenschlusses der Verbindung gültig war. "

Ist es nicht ein widersprüchlicher Absatz ("bis" vs. "beibehalten")?

Wenn dann "die Isolationsstufe von der letzten Anweisung SET TRANSACTION ISOLATION LEVEL beibehalten wird ", nachdem die Verbindung geschlossen und an einen Pool zurückgegeben wurde, wie sollte dies verstanden werden:

  • dass die Standardisolationsstufe einen beliebigen Wert hat (verschiedene Verbindungen im Pool haben unterschiedliche Isolationsstufen und ihr Wert hängt von der Verbindung ab, die erneut geöffnet wird)?
  • oder werden alle Standardwerte für alle Verbindungen in Ihrem Pool auf die letzten geändert? aber schon mal ganz unbekannt vorher?

Antworten:


14

Für eine Verbindung aus dem Pool wird die Isolationsstufe vom letzten Client festgelegt, der diese Verbindung verwendet. Ja, es ist wirklich so beängstigend.

Das lange und das kurze daran ist, dass Sie, wenn Sie die Isolationsstufe einer Verbindung ändern, diese READ COMMITTEDvor dem Schließen explizit zurücksetzen müssen . Besser ist es, die erforderliche Isolationsstufe zu Beginn eines Stapels explizit zu deklarieren, um sicherzustellen, dass Ihr Code nicht von einer anderen Person beeinflusst wird, die schlampig ist, und ihn am Ende auf die Standardeinstellung zurückzusetzen.

Dieses Verhalten, während verblüffende, ist offenbar durch-Design .


Nie gesehen diese "müssen explizit" und "Besser ist explizit" in MSDN-Artikeln, Büchern, Blogs, Dokumenten usw.
Fulproof

5

Ist es nicht ein widersprüchlicher Absatz ("bis" vs. "beibehalten")?

Nicht für mich, aber ich kann sehen, dass es andere Möglichkeiten gibt, es zu lesen. Wenn Sie möchten, dass die Dokumentation übersichtlicher wird, können Sie dies an Microsoft Connect anfordern . Die Leute hier pflegen keine Microsoft-Dokumentation.

dass die Standardisolationsstufe einen beliebigen Wert hat (verschiedene Verbindungen im Pool haben unterschiedliche Isolationsstufen und ihr Wert hängt von der Verbindung ab, die erneut geöffnet wird)?

Wenn Sie eine gepoolte Verbindung wiederverwenden, ist die "bereits vorhandene" Isolationsstufe diejenige, die beim letzten Schließen der gepoolten Verbindung wirksam war. Es wird empfohlen, die für die Verbindung erforderliche Isolationsstufe explizit festzulegen.

oder werden alle Standardwerte für alle Verbindungen im Pool auf die letzten geändert? aber schon mal ganz unbekannt vorher?

Nein.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.