SET TRANSACTION ISOLATION LEVEL SERIALIZABLEの後にコミットされた読み取りを追加しますか?


9

ストアドプロシージャの内部には、次のものがあります。(SQL Server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

これはトランザクションベースであるため、残りのデータベース接続はSERIALIZABLEの影響を受けないだろうと私は考えました。

コミット後にコミットされた読み取りに暗黙的に分離レベルを設定する必要がありますか?これは、アプリケーションサーバーとデータベースサーバー間の他の接続に悪影響を及ぼしますか?

回答:


6

コマンドはTRANSACTION ISOLATION LEVELではなくSERVER ISOLATION LEVELです。トランザクションスコープの分離レベルのみが変更されます。


5

いいえ、コミットレベルの読み取りに暗黙的に分離レベルを戻す必要はありません。

オンラインの本から。

ストアード・プロシージャーまたはトリガーでSET TRANSACTION ISOLATION LEVELを発行すると、オブジェクトが制御を戻すと、分離レベルは、オブジェクトが呼び出されたときに有効だったレベルにリセットされます。たとえば、REPEATABLE READをバッチで設定し、そのバッチが分離レベルをSERIALIZABLEに設定するストアドプロシージャを呼び出す場合、ストアドプロシージャが制御をバッチに戻すと、分離レベルの設定はREPEATABLE READに戻ります。


3

投稿したコマンドは、SPでを使用してトランザクションを実行するだけTRANSACTION ISOLATION LEVEL SERIALIZABLEです。他の接続はデフォルトでデフォルトの分離レベルに設定されます-コミットされた読み取り(明示的に別の分離レベルを指定しない限り)。

ポールホワイトによる優れたシリーズがあります-SQL Server分離レベル:さまざまな分離レベルが何を意味するかを理解し、それらを使用するときに役立つシリーズ


-3

以前のアプローチの欠点のほとんどを回避するかなり新しいアルゴリズム。楽観的なアプローチを使用して、トランザクションをブロックせずに続行できるようにします。トランザクションがコミットしたい場合、それがチェックされ、実行がシリアライズ可能でなければ、トランザクションは中止されます。すべてのアプローチの詳細:http ://writeulearn.com/relational-database-transactions/


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