본문 바로가기
컴퓨터공학/데이터베이스(database)

[ Concurrency Control] Automatic Acquisition of locks

by 바코94 2020. 5. 31.

데이터 베이스 내부에서 lock-S을 알아서 얻는 역할을 해준다.

위와 같은 로직으로 read할 때 충돌연산을 피해 락을 가져오게 된다.

 

write를 할 때는 다음과 같이 락을 얻는다.

위와 같은 역할은 lock manager로 구현되어 있다.

락 메니저의 역할은 다음과 같다

요청에 대한 응답 메세지를 주거나 데드락을 유발할 경우 롤백을 하게 한다.

락을 위해 트랜잭션을 기다리게 해준다.

락에 대한 요청들을 락 테이블에 관리한다. 해시 테이블 형태로 구현되어 있다.

 

락테이블은 다음과 같이 해쉬 테이블로 관리된다.

 

request of lock, request of unlock에 따라 테이블의 데이터별 큐를 관리를 하게 된다.

만약 트랜잭션에 abort가 발생하게 되면 어떻게 모든 트랜잭션을 테이블에서 지울 수 있을까?

답은 트랜잭션별로 링크드 리스트 형태로 연결해두면 모든 트랜잭션을 다 찾아서 지울 필요가 없이 하나만 찾으면 줄줄이 소세지처럼 지울 수 있다.