「接続が閉じてプールに戻されると、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます」?


8

MSDNオンライン記事「SQL Serverのスナップショット分離」には、次のように記載されています

  • 「分離レベルには接続全体のスコープがあり、SET TRANSACTION ISOLATION LEVELステートメントを使用して接続に設定されると、接続が閉じられるか、別の分離レベルが設定されるまで有効です。接続が閉じられ、プールに戻されるとき、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます。プールされた接続を再利用する後続の接続では、接続がプールされたときに有効だった分離レベルが使用されます。

自己矛盾する段落ではありませんか(「まで」と「保持」)。

次に、接続を閉じてプールに戻した後、「最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されている」場合、それをどのように理解する必要がありますか。

  • デフォルトの分離レベルは任意の値になります(プール内の異なる接続には異なる分離レベルがあり、その値は再オープンされる接続に依存します)?
  • または、プール内のすべての接続のすべてのデフォルト値が最後の値に変更されますか?しかし、手に入る前にまた全く未知ですか?

回答:


14

プールからの接続には、その接続を使用するために最後のクライアントによって設定された分離レベルがあります。はい、本当に怖いです。

長い点と短い点は、接続の分離レベルを変更する場合は、READ COMMITTED閉じる前に明示的に設定を戻す必要があるということです。バッチの開始時に必要な分離レベルを明示的に宣言し、他の誰かがずさんなコードによって影響を受けないようにし、最後にデフォルトに戻すことをお勧めします。

この振る舞いは、不可解ですが、明らかに仕様によるものです


それらの「必要があります明示的」とMSDNの記事、書籍、ブログ、ドキュメントなどで「より良いが明示的にある」見たことがない
Fulproof

5

自己矛盾する段落ではありませんか(「まで」と「保持」)。

私にはわかりませんが、他にもさまざまな方法で読むことができます。ドキュメントをより明確にするために更新する場合は、これを要求する適切な場所はMicrosoft Connectです。ここの人々はマイクロソフトのドキュメントを管理していません。

デフォルトの分離レベルは任意の値になります(プール内の異なる接続には異なる分離レベルがあり、その値は再オープンされる接続に依存します)?

プールされた接続を再利用している場合、はい、「既存の」分離レベルは、プールされた接続が最後に閉じられたときに有効だった分離レベルです。接続時に必要な分離レベルを明示的に設定することをお勧めします。

または、プール内のすべての接続のすべてのデフォルト値が最後の値に変更されますか?しかし、手に入る前にまた全く未知ですか?

番号。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.