전공 과목 이수2👨‍💻/데이터베이스관리

동시성 제어

천숭이 2021. 12. 8. 21:46

- 한 트랜잭션이 락을 가지고 있는 동안에 다른 트랜잭션들은 락을 가질 수 없고 그 락이 해제될 때까지 기다려야 한다. 락킹 정책에 따라 한 순간에 단지 하나의 트랜잭션만 실행한다. 따라서 순차적 스케줄만 생성된다.

- 직렬적이며 복구가능하며 비연쇄적임을 명백히 알 수 있다.

- 트랜잭션에 의해 획득된 모든 락들은 그 트랜잭션이 커밋되거나 중단된 후에(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얻는 과정의 알고리즘

read(D) 알고리즘

# 트랜잭션 Ti가 데이터D에 대하여 write연산을 실행하기 위하여 lock-X얻는 과정의 알고리즘

- 다른 트랜잭션이 lock-S 없을때까지 기다렸다가, 수행해야 한다.

- write까지가 증가단게 (GP)였다면, unlock 감소단계를 진행해야 한다 (SP)

내부 if문 중요 )

- ** lock-S가 트랜잭션에 있으면 lock-X로 업그레이드

- lock-S도 없으면 lock-X 승인값받기 (...waiting)

write(D)
시간흐름에 따른 트랜잭션의 행동들

 

# 락 매니저 / 락 관리자

- 락 관리자는 트랜잭션으로부터 요청 메시지를 받고 응답 메시지를 다시 트랜잭션으로 보내는 프로세스

- 락 허용메시지 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