Microsoft SQL Server
分離レベルとロック
サーチ…
備考
私はこのリンクを見つけました。これは参考として役立ちます: "分離レベル"
分離レベルの設定例
分離レベルの設定例:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
READ UNCOMMITTED
- 現在のトランザクションのクエリが、まだコミットされていない別のトランザクションから変更されたデータにアクセスできないことを意味します。しかし、他のトランザクションによってデータが変更される可能性があるため、反復不可能な読み取りとファントム読み取りが可能です。REPEATABLE READ
- 現在のトランザクション内のクエリが、まだコミットされていない別のトランザクションから変更されたデータにアクセスできないことを意味します。他のトランザクションは、完了するまで現在のトランザクションによって読み取られているデータを変更することはできません。これは、NONREPEATABLE読み取りを排除します。しかし、別のトランザクションでNEW ROWSが挿入され、クエリが2回以上実行された場合、ファントム行が2番目の読み取りを開始するように見えることがあります(クエリのwhere文に一致する場合)。SNAPSHOT
- クエリの先頭に存在するデータのみを返すことができます。データの一貫性を保証します。ダーティリード、反復不可能リード、ファントムリードを防止します。それを使用するには - DB構成が必要です:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-
READ COMMITTED
- SQLサーバーのデフォルトの分離。コミットされるまで別のトランザクションによって変更されたデータの読み取りを防止します。ダーティな読み込みを防止する共有ロックと行のバージョン管理をテーブルで使用します。これはDB構成に依存します。READ_COMMITTED_SNAPSHOT - 有効な場合、行のバージョニングが使用されます。これを有効にするには -
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
-
SERIALIZABLE
- トランザクションが終了するまで取得され保持される物理的なロックを使用します。これにより、不正な読み取り、ファントム読み取り、反復不可能な読み取りが防止されます。しかし、これは、並行トランザクションがシリアル化され、1つずつ実行されるため、データベースのパフォーマンスに影響します。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow