728x90
락
- 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요함
- 데이터를 수정 중이라는 사실을 알리는 방법의 잠금 장치.
공유락(Shared Lock) - 락을 잡고 있을 때 다른 트랜잭션이 읽을 수는 있는 lock
배타락(Exclusive Lock) - 다른 트랜잭션이 읽을 수도 없는 lock
3. Shared Lock / Exclusive Lock을 사용하는 규칙
데이터에 락이 걸려있지 않으면 Transaction은 데이터에 Lock을 걸 수 없다.
Transaction이 데이터 X를 읽기만 할 경우, LS(X)를 요청하고, 읽거나 쓰기를 할 경우 LX(X)를 요청한다.
다른 Transaction이 데이터에 LS(X)를 걸어둔 경우, LS(X)의 요청은 허용하고 LX(X)는 요청하지 않는다.
다른 Transaction이 데이터에 LX(X)를 걸어둔 경우, LS(X)와 LX(X) 모두 허용하지 않는다.
Transaction이 Lock을 허용받지 못하면 대기 상태가 된다.
요청 상태 | LS 상태 | LX 상태 |
LS 요청 | 허용 | 대기 |
LX 요청 | 대기 | 대기 |
데드락
- 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. 교착상태
데드락을 최소화 시키는 DBMS의 전반적 대책
- 트랜잭션을 자주 커밋
- 정해진 순서로 테이블에 액세스
- 필요 없는 경우에는 읽기 잠금 획득 사용을 피함
- 쿼리에 의한 잠금 범위를 좁히거나 더 작은 것으로 함
- 한 테이블의 복수 행을 순서 변경 없이 갱신하면 교착 상태가 발생하기 쉬움
- 테이블 단위 잠금 획득해 갱신 직렬화
728x90
'정리' 카테고리의 다른 글
[데이터베이스 강의 정리] 7. 테이블 설계 (0) | 2021.08.05 |
---|---|
[데이터베이스 강의 정리] <참고> Entity (0) | 2021.08.05 |
[데이터베이스 강의 정리] 5. 트랜잭션(Transaction) (0) | 2021.08.05 |
[데이터베이스 강의 정리] 4. 오라클, SQL (0) | 2021.08.05 |
[데이터베이스 강의 정리] 3. 아키텍쳐 (0) | 2021.08.05 |