- 한 트랜잭션이 락을 가지고 있는 동안에 다른 트랜잭션들은 락을 가질 수 없고 그 락이 해제될 때까지 기다려야 한다. 락킹 정책에 따라 한 순간에 단지 하나의 트랜잭션만 실행한다. 따라서 순차적 스케줄만 생성된다.
- 직렬적이며 복구가능하며 비연쇄적임을 명백히 알 수 있다.
- 트랜잭션에 의해 획득된 모든 락들은 그 트랜잭션이 커밋되거나 중단된 후에(abort) 전부 해제된다
충돌 직렬성 -> 락 기반 프로토콜로 구현
뷰 직렬성 -> 타임스탬프 기반 프로토콜로 구현
<처리과정>
SQL -> 질의처리기 -> read/write 트랜잭션 -> 트랜잭션 매니저(여기서 lock request 명령어를 받음)
-> 동시성 제어 컴포넌트 -> 스케줄 -> 직렬성
-> Lock Manage
<- 동시성제어컴포넌트에게 승인값을 넘겨줌 (grant)
lock manage가 아무값도 넘겨주지 못하면 grant 메세지 못보냄
## 락 기반 규약 (Lock-Based Protocols)
- 충돌 직렬성을 위해 구현됨
- 데이터를 read/write 하기 위해서는 락을 요청해야한다 ex)수강신청 대기
락의 종류는 두가지 :
1. 독점적 락 모드
X-lock request : lock-X 명령어
요청 허용 시 read와 write 둘 다 가능
2. 공유 락 모드
S-lock request : lock-S 명령어
요청 허용 시 only read만 가능
- 락 호환성 행렬
º T1과 T2의 순서를 바꾸면 상황이 바뀐다 -> 충돌 발생
º 행렬값이 true일때는 승인이 된것이므로 접근가능
º 행렬값이 false일때는 승인값이 떨어지기만을 기다림
예시 1)
- 위 예시1는 직렬성을 보장하기ㅣ에는 충분하지 않다
예시 1 직렬성 깨지는 경우 )
# 락 기반 규약의 함정 (pitfall)
- 서로 락 풀어주기만을 기다리는 상태 : deadlock 교차상태
해결) T3 or T4 가 rollback/abort하면 된다
# 2단계 락킹 규약 (2pl)
- 충돌 직렬성 보장해줄 수 있는 규약 (순차적스케줄과 동등한 형태)
- 락 지점 : 스케줄에서 트랜잭션이 마지막 락을 얻는 부분(증가 단계의 마지막 부분)
1. 증가 단계 : 트랜잭션이 락을 얻을 수는 있으나 락을 해제할 수는 없는 단계
2. 감소 단계 : 트랜잭션이 락을 해제할 수 는 있으나 락을 얻을 수 없는 단계
# strict 2단계 락킹 규약 (엄격)
- 연쇄적 롤백 방지 (스케줄은 직렬성은 가지되 연쇄성은 가지지 않아야 한다)
- 트랜잭션이 정상적으로 커밋될때까지 자신이 가진 독점적 모드의 락들을 그대로 유지하도록 한다
- 커밋되기 전에는 다른 트랜잭션이 그 데이터를 읽을 수 없다
# rigorous 2단계 락킹 규약 (철저)
- 트랜잭션이 커밋될때까지 모든 락을 해제하지 않고 계속 가지는것
- 트랜잭션들이 그들의 커밋순서에 따라 직렬화된다
# 트랜잭션 Ti가 데이터D에 대하여 read연산을 실행하기 위하여 lock-S얻는 과정의 알고리즘
# 트랜잭션 Ti가 데이터D에 대하여 write연산을 실행하기 위하여 lock-X얻는 과정의 알고리즘
- 다른 트랜잭션이 lock-S 없을때까지 기다렸다가, 수행해야 한다.
- write까지가 증가단게 (GP)였다면, unlock 감소단계를 진행해야 한다 (SP)
내부 if문 중요 )
- ** lock-S가 트랜잭션에 있으면 lock-X로 업그레이드
- lock-S도 없으면 lock-X 승인값받기 (...waiting)
# 락 매니저 / 락 관리자
- 락 관리자는 트랜잭션으로부터 요청 메시지를 받고 응답 메시지를 다시 트랜잭션으로 보내는 프로세스
- 락 허용메시지 grant 혹은 취소 요청 메시지(교착상태) 로 응답한다
- 다른 데이터에 락 요청하기 전에 자신의 락을 해제 하지 않는 다면 교착상태가 발생할 수 있다.
- 자료구조 : 요청이 접수되는 순서대로 연결리스트 유지
- 데이터 항목의 연결리스트를 검색하기 위해 데이터 항목의 이름을 기반으로 인덱스된 해시 테이블을 락테이블이라고 한다.
- 교착상태가 비일관성 상태보다 낫다
- 락을 사용하지 않거나 읽기 도는 기록 연산을 수행한 다음 즉시 락을 해제한다면 비일관성 상태에 빠질 수 있다
- 락 테이블 관리
# 락 테이블 예시
- 락 테이블은 트랜잭션 식별자의 인덱스를 유지해야 한다.
'전공 과목 이수2👨💻 > 데이터베이스관리' 카테고리의 다른 글
복구 시스템 (0) | 2021.12.17 |
---|---|
교착상태 처리, 예방 (0) | 2021.12.16 |
스케줄 (0) | 2021.12.08 |
Transaction 트랜잭션 (0) | 2021.12.06 |
인덱스 정리 (0) | 2021.11.05 |
인덱스 (0) | 2021.10.13 |