SQLServerの分離/ロックを理解しようとしています。
READ COMMITTED分離レベルで次のシナリオがあります(デフォルト)
テーブルがあります。
create table Transactions(Tid int,amt int)
with some records
insert into Transactions values(1, 100)
insert into Transactions values(2, -50)
insert into Transactions values(3, 100)
insert into Transactions values(4, -100)
insert into Transactions values(5, 200)
今msdnから私は理解しました
選択が実行されると、共有ロックが取得されるため、他のトランザクションはデータを変更できません(ダーティリードを回避します)。ドキュメントでは、行レベル、ページレベル、テーブルレベルのロックについても説明しています。次のシナリオを考えました
Begin Transaction
select * from Transactions
/*
some buisness logic which takes 5 minutes
*/
Commit
私が理解したいのは、共有ロックが取得される期間と、それ(行、ページ、テーブル)です。
ロックは、ステートメントselect * from Transactions
が実行されたときにのみ取得されるか、COMMITに到達するまで5分以上取得されます。