데이터베이스 개발자 질문과 답변 게시판
mssql은 select 수행시 shared lock을 건다고 알고 있습니다
(어디서 줏어 듣기론 5천건 이상 조회를 수행하면 lock을 건다고 하는데 이게 정확한건지 모르겠습니다..)
궁금한건 동일 테이블에 작업을 수행할 때 어떻게 lock이 걸리는가입니다.
두개의 세션이 있다고 가정하고 (A, B)
1. A가 select 중에 B가 select 를 수행하면 B의 select 작업은 wait이 걸리나요?
2. A가 select 중 B가 update, insert, delete 등을 수행하면 B가 Wait이 걸리나요? A 작업이 취소되나요?
3. A가 update, insert, delete 등을 수행하는 중 B가 select 를 수행하면 B의 select 가 수행되나요? Wait이 되나요?
select에 대한 lock이 생소하다보니 좀 애로사항이 많습니다.
많은 조언 부탁드립니다.
Comment 4
-
minsouk
2013.01.25 12:54
-
방랑도사
2013.01.25 15:57
특별한 설정을 하지않은 일반적인 경우엔
1. A가 select 중에 B가 select 를 수행하면 B의 select 작업은 wait이 걸리나요? 아니오. shared lock 은 조회시 서로 호환됩니다.
2. A가 select 중 B가 update, insert, delete 등을 수행하면 B가 Wait이 걸리나요? A 작업이 취소되나요? B가 wait걸립니다. shared lock은 배타적잠금과 호환되지 않습니다. 즉 조회중인 row에는 수정,삭제가 안됩니다.
3. A가 update, insert, delete 등을 수행하는 중 B가 select 를 수행하면 B의 select 가 수행되나요? Wait이 되나요? wait 됩니다. 입력,수정, 삭제시에 걸리는 배타적잠금은 공유잠금과 호환되지 않습니다.
-
토토로
2013.01.26 00:53
민석님 // isolation level이란게 있었군요.. 새로운 개념을 알았습니다 ㅎㅎ방랑도사님 // 궁금한 내용에 대한 답변 감사합니다. ^^ -
쓸만한게없네(윤선식)
2013.01.26 18:32
http://cafe.naver.com/sqlmvp/3459
및 traceflag 1200 번을 이용해 테스트 하시면 됩니다.
위 질문은 테스트 조건이 없기 때문에 답변하기 어렵습니다.
예를 들면 두 세션의 transaction isolation level 이나 lock 되는 row 수 (메모리사이즈에 영향을 줌) 등이 명시되어 있지 않기 때문입니다.