반응형
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 둘 중에서 한명이 양보하기 전까지 절대로 풀릴 수 없음
패스트 캠퍼스 링크
반응형
'자격증 > 패스트 캠퍼스 데이터베이스와 SQLD 합격패스 Online' 카테고리의 다른 글
패스트 캠퍼스 챌린지 24일차 데이터베이스와 SQLD 합격패스 Online (0) | 2021.09.29 |
---|---|
패스트 캠퍼스 챌린지 23일차 데이터베이스와 SQLD 합격패스 Online (0) | 2021.09.28 |
패스트 캠퍼스 챌린지 21일차 데이터베이스와 SQLD 합격패스 Online (0) | 2021.09.26 |
패스트 캠퍼스 챌린지 20일차 데이터베이스와 SQLD 합격패스 Online (0) | 2021.09.25 |
패스트 캠퍼스 챌린지 19일차 데이터베이스와 SQLD 합격패스 Online (0) | 2021.09.24 |