본문 바로가기

컴퓨터공학/데이터베이스(database)45

[Concurrency Control]Multiple Granularity Locking 락을 거는 단위에 대해서 살펴보자. 아이템에 락을 걸 때 단위가 다양하다. 즉, DB가 계층적으로 구성되어 있다고 하면 락을 걸게 되었을 때 노드의 자식 노드에 대해서도 동일한 락을 건다는 뜻을 담는다. 계층적 구조에서 root에 X락을 걸었다면 모든 하위 노드에도 X락을 걸게된다. 또한 root가 아닌 하위 노드에서 X락을 걸려면 부모부터 root까지 IX락이 걸려있어야 한다. 학생 테이블에서 평균값을 구하는 상황을 생각해보자. 단위를 레코드 처럼 작게 설정하면 트랜잭션에서 락을 걸 때 concurrency가 높다. 하지만 모든 학생 레코드를 읽으려면 오버헤드가 크다. 단위를 테이블 처럼 크게 설정하면 락을 걸 때 테이블에 대해서만 락을 걸면 된다. 학생들의 평균 값을 구할 때 테이블에 락을 걸면 오버.. 2020. 6. 1.
[Concurrency Control]Graph-based protocol 2PL의 대안인 graph-based protocol을 알아보자. 모든 데이터 아이템에 대한 set D이 있다고 하면 접근하는 순서가 partial ordering 을 만족시키면 acyclic한 그래프가 된다. 트리의 인덱스의 경우에는 이런 특정한 상황이 만족된다. 즉, tree-based protocol이 한 예이다. tree-based protocol X락만 허용 Ti의 첫 번째 락은 어떤 아이템에 대한 것이든 상관없다. Ti가 데이터 Q에 락을 걸려면 Q의 부모에 락을 갖고 있어야 한다. 데이터는 언제든 언락 될수 있다. 같은 아이템에 대해서는 락을 걸고 풀었으면 락을 얻지 못한다. 참고적으로 이해하면 되겠다. graph-based protocol은 conflict serializability을 보.. 2020. 5. 31.
[ Concurrency Control] Automatic Acquisition of locks 데이터 베이스 내부에서 lock-S을 알아서 얻는 역할을 해준다. 위와 같은 로직으로 read할 때 충돌연산을 피해 락을 가져오게 된다. write를 할 때는 다음과 같이 락을 얻는다. 위와 같은 역할은 lock manager로 구현되어 있다. 락 메니저의 역할은 다음과 같다 요청에 대한 응답 메세지를 주거나 데드락을 유발할 경우 롤백을 하게 한다. 락을 위해 트랜잭션을 기다리게 해준다. 락에 대한 요청들을 락 테이블에 관리한다. 해시 테이블 형태로 구현되어 있다. 락테이블은 다음과 같이 해쉬 테이블로 관리된다. request of lock, request of unlock에 따라 테이블의 데이터별 큐를 관리를 하게 된다. 만약 트랜잭션에 abort가 발생하게 되면 어떻게 모든 트랜잭션을 테이블에서 지울.. 2020. 5. 31.
[Concurrency Control] 2PL ensure conflict serializability? Proof 2PL 이 serializabizable schedule을 보장하지 못한다고 가정해보자. precedence graph를 그려서 cycle이 생겨야한다. T0->T1-> ... -> Tn->T0 이라고 하자. ai는 Ti의 lock point라고 하자.(phase 1에서 2로 넘어가는 부분) 2PL은 lock을 얻는 단계와 lock을 푸는 단계로 나뉜다. lock lock lock unlock unlock 와 같은 방식이다. Ti Tj R(Q) unlock W(Q) ... unlock 와 같이 있으면 충돌연산이기 떄문에 Ti의 Q를 락 푸는 시점이 Tj의 Q를 락 푸는 시점보다 빠르다. 일반화 시키면 Ti->Tj이면 ai->aj인데 cycle이 있다고 했기 때문에 T0->T0 순서이기 때문에 .. 2020. 5. 31.