Lock 발생상황에 대해서 구체적으로 질문드립니다.. 0 1 549

by minmin [DB 기타] [2020.07.22 16:17:07]


안녕하세요. 초급개발자입니다!

다름이 아니고 구체적인 db lock 발생상황에 대해 의문이 생겨 검색의 검색의 검색을 해봤으나 명확하게 이해되지 않아서 직관적으로 질문 좀 드려도 될까 하고 글 남깁니다..

 

대표적인 락의 종류가

1)S_LOCK  공유잠금 (SELECT)

2)X_LOCK 베타잠금 (DML)

로 알고 있습니다.

 

제가 이해하기로는 트랜잭션 1이 한 테이블에 대해 DML 작업을 처리하는 도중 트랜잭션2는 트랜잭션1의 작업이 완료(commit or rollback)되기 이전에 해당 테이블에 

dml 혹은 select 작업을 대기한다 라고 알고있습니다. (lock을 생성하는 대상이 테이블인지 row인지는 명확하게 모르겠습니다.. 답변주시면 감사하겠습니다.)

 

여기서 제가 궁금한 점은 만약 어플리케이션에서 하나의 서비스 메서드에 트랜잭션을 선언하고

그 서비스 메서드에 

1)A table INSERT

2)B table update

3)C table delete 

이러한 비지니스 로직이 있다면, 이 메서드가 완벽히 종류되기 이전에는 다른 트랜잭션에선 A,B,C테이블에 대해 대기상태인건지 궁금합니다.

 

명확하게는 어플리케이션에서 개발자가 명시하는 트랜잭션의 단위가, db서버 입장에서도 동등한 단위인지,아니면 개별 쿼리마다의 트랜잭션을 가져가는지, 또 이에 따라 lock이 생성되는건지가 궁금합니다.

 

답변주시면 감사하겠습니다!!

 

 

 

 

 

 

by pajama [2020.07.22 16:52:14]

db마다 차이는 있는데 row 단위 lock이 일반적입니다.

트랜잭션이 완료되기 전까지(commit or rollback) insert update delete가 실행된다면 3개 문장이 실행되는 한 트랜잭션으로 보시면 됩니다.

각 문장별로 테이블의 레코드와 인덱스에 lock을 점유합니다. 트랜잭션이 완료되면 lock이 해제됩니다.

undo 기능, index 유무, isolation level에 따라서 트랜잭션의 동시성이 달라지기도 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입