티스토리 뷰

Lock

여러개의 트랜젝션이 데이터베이스에 접근할 때 값에 대해 중복 쓰기, 중복 읽기를 막기 위해서 해당 값에 대한 접근을 막는것을 말한다. 기본적으로 어떤 값에 Lock을 건 트랜젝션만이 Lock을 해제할 수 있다.

 

  • Lock-S (Shared Lock) - 읽기는 가능하지만 쓰기는 불가능하게 막는다. 다른 트랜젝션이 같은 값에 대해 Lock-S를 걸 수 있다. 단, Lock-S가 걸린 값에 Lock-X를 추가로 걸 수 없다.
  • Lock-X (Exclusive Lock) - 읽기와 쓰기 모두 불가능하게 막는다. 다른 트랜젝션이 같은 값에 대해 어떠한 Lock도 추가로 걸 수 없다.

 

이러한 Lock을 활용해서 여러개의 트랜젝션이 동시에 수행될 때 서로 다른 값을 가지고 연산하지 않도록 만들어야한다.

 

Two-Phase Locking Protocol

직렬성을 보장하기 위해 사용되는 방법 중 하나이다. Lock을 수행하는 단계(확장), Unlock을 수행하는 단계(수축)으로 나눠서 수행한다. TP Locking 프로토콜을 준수하면 해당 트랜젝션들은 직렬화 할 수 있다.
확장단계에서 Lock 단계를 상승(Lock-S -> Lock-X)할 수 있으며, 수축단계에서 Lock 단계를 하강(Lock-X -> Lock-S)할 수 있다.
하지만 문제가 생겨서 abort해야할 경우 연결된 트랜젝션이 모두 abort되어야하는 cascading rollback이 발생한다.

 

Strict Two-Phase Locking Protocol
Lock-X를 건 트랜젝션이 commit하거나 abort하기 전까지 Unlock을 수행하지 않도록 더 강한 규칙을 부여해서 cascading rollback을 방지한다.

 

Strict Two-Phase Locking은 Cascading Rollback은 방지할 수 있지만 교착상태가 발생할 수 있다.

 

Rigorous Two-Phase Locking Protocol
모든 Lock에 대해 Lock을 건 트랜젝션이 commit/abort 되기 전까지 Unlock을 수행하지 않도록 더욱 강한 규칙을 부여한다.

 

 

교착상태 (Deadlock)

Lock을 걸면서 트랜젝션을 병행수행하다보면 서로가 가지고있는 값을 Lock하기 위해 Unlock을 무한정 대기하는 교착상태가 발생한다.

 

예방 (Prevention)

트랜젝션은 연산을 시작하기 전에 자신이 필요한 값을 모두 Lock을 건다. 다만 이렇게 할 경우 해당 트랜젝션이 끝날 때까지 다른 트랜젝션이 실행될 수 없기 때문에 기아상태(Stavation)이 생길 수 있다.
기아상태를 방지하기 위해 다양한 회피전략이 사용된다.

 

Wait-Die
어떠한 값에 Lock을 걸고 연산을 수행하려고 할 때 다른 트랜젝션이 해당 값을 점유하고 있다면 실행 순서를 고려하여 대기(wait)하거나 포기(die)하는 전략이다. 자신이 먼저 실행되었다면 대기하고, 자신이 더 늦게 실행되었다면 포기하고 rollback한다.

Wound Wait
위와 동일하게 어떠한 값에 Lock을 걸려고 할 때 자신이 더 먼저 실행되었다면 값을 선점(wound)한다. 반대로 자신이 더 늦게 실행되었다면 대기(wait)한다. 선점할 때 그 값을 가지고있던 트랜젝션을 강제로 rollback시킨다.

Timeout
정해진 시간동안만 unlock을 기다린다. 지정된 시간동안 unlock이 안되면 포기하고 재시작한다.

 

복구 (Recover)

교착상태가 감지되면 손실이 가장 적은 희생 트랜젝션(victim)을 선정해서 rollback시켜서 교착상태를 벗어난다. 다만 한 트랜젝션이 계속 victim으로 선택되어 기아상태가 발생할 수 있으므로 이를 고려해서 victim을 선정하는 방법도 다양하게 해야한다.

'Non-Programming > Database' 카테고리의 다른 글

데이터베이스 - 정보 검색 시스템  (0) 2019.06.12
데이터베이스 - 오류 복구  (0) 2019.06.12
데이터베이스 - 트랜젝션 (Transaction)  (0) 2019.05.23
SQL - subquery  (0) 2019.05.20
데이터베이스 정규화  (0) 2019.05.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함