본문 바로가기
자격증/패스트 캠퍼스 데이터베이스와 SQLD 합격패스 Online

패스트 캠퍼스 챌린지 22일차 데이터베이스와 SQLD 합격패스 Online

by 리드민 2021. 9. 27.
반응형

Ch 06. 트랜잭션 - 04. 락과 데드락

[] 락의 개념

(1) 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요함. 
(2) 데이터를 수정 중이라는 사실을 알리는 방법의 잠금 장치임.
T1 T2 버퍼의
데이터 값
LOCK(X)
A=read_item(X);
A=A-100;
  X=1000
  LOCK(X)
(wait... 대기)
X=1000
write_item(A->X);
UNLOCK(X);
  X=900
  B=read_item(X);
B=B+100;
write_item(B->X);
UNLOCK(X)
X=1000

- T1이 버퍼 X에(X는 1000) Lock을 잡고 A에 저장 후 100을 빼기
- T2는 T1이 Lock 을 잡고 있어서 대기 상태에 빠짐 
- T1이 버퍼 X에 A라는 값을 쓰고 Lock 을 해제(X는 900이 됨)
- 그제서야 T2는 버퍼 X를 읽어서 (X는 900) 100을 더한 후 X에 쓰기
- T2가 Lock 을 해제함 X는 최종적으로 1000이 됨

 

[] 락의 유형

(1) 락은 트랜잭션이 읽기를 할 때 사용하는 락인 공유락(LS, shared lock)과 읽고 쓰기를 할 때 사용하는 배타락(LX, exclusive lock)으로 나뉨.
(2) 공유락과 배타락을 사용하는 규칙

- 데이터에 락이 걸려있지 않으면 트랜잭션은 데이터에 락을 걸 수 있다.
- 트랜잭션이 데이터 X를 읽기만 할 경우 LS(X)를 요청하고, 읽거나 쓰기를 할 경우 LX(X)를 요청한다.
- 다른 트랜잭션이 데이터에 LS(X)을 걸어둔 경우, LS(X)의 요청은 허용하고 LX(X)는 허용하지 않는다.
- 다른 트랜잭션이 데이터에 LX(X)을 걸어둔 경우, LS(X)와 LX(X) 모두 허용하지 않는다.
- 트랜잭션이 락을 허용받지 못하면 대기 상태가 된다.

요청 상태 LS 상태 LX 상태
LS 요청 허용 대기
LX 요청 대기 대기

[] 데드락

(1) 데드락(deadlock) : 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. 교착상태라고도 함.
(2) 서로 상대의 테이블에 잠금 필요한 처리 실행 아무리 대기해도 상황 바뀌지 않음
(3) 일반적으로 데드락이 발생하면 DBMS는 T1 혹은 T2의 작업 중 하나를 강제로 중지시킴. 그 결과 나머지 트랜잭션은 정상적으로 실행됨. 이때 중지시키는 트랜잭션에서 변경한 데이터는 원래 상태로 되돌려 놓음. 

 

(1) 사용자1이 테이블 A에 락을 거는데 성공함
(2) 사용자2가 테이블 B에 락을 거는데 성공함
(3) 사용자1이 테이블 B에 락을 걸기 위해서 대기함
(4) 사용자2가 테이블 A에 락을 걸기 위해서 대기함

- 이 상황은 사용자1과 사용자2 둘 중에서 한명이 양보하기 전까지 절대로 풀릴 수 없음

 

패스트 캠퍼스 링크

https://bit.ly/37BpXiC

반응형