View

[DB] 락(Lock)이란?

옥돔이와 연근이 2022. 9. 8. 15:57
반응형

💡 락(Lock)이란?

데이터베이스는 여러 사용자들이 같은 데이터를 동시에 접근하는 상황에서, 데이터의 무결성과 일관성을 지키기 위해 사용

💡 락(Lock)의 종류

크게는 공유락과 배타적락으로 나누어지긴함

공유 락(Shared Lock)

공유 락은 데이터를 변경하지 않는 읽기 명령에 대해 주어지는 락으로 Read Lock이라고도 불리며 Shared의 앞 글자를 따서 주로 S로 표기한다

여러 사용자가 동시에 데이터를 읽어도 데이터의 일관성에는 아무런 영향을 주지 않기 때문에, 공유 락끼리는 동시에 접근이 가능 → 즉, 내가 보고 있는 데이터는 다른 사용자가 볼 수 있지만, 변경할 수는 없음

베타 락(Exclusive Lock)

베타 락은 데이터에 변경을 가하는 쓰기 명령들에 대해 주어지는 락으로 Write Lock으로도 불리며, X로 표기한다

베타 락은 이름처럼 다른 세션이 해당 자원에 접근(ex, SELECT, INSERT..) 하는 것을 막는다. 이러한 점에서 베타 락은 멀티 쓰레딩 환경에서, 임계 영역을 안전하게 관리하기 위해 활용되는 뮤텍스와 유사하다고 볼 수 있다.

베타 락은 트랜잭션 동안 유지 → 즉, 읽기와 쓰기가 불가능

업데이트 락(Update Lock)

업데이트 락은 데이터를 수정하기 위해 베타 락(X)을 걸기 전, 데드 락을 방지하기 위해 사용되는 락이다

일반적으로 업데이트 락은 UPDATE 쿼리의 필터(WHERE)가 실행되는 과정에서 적용된다

내재 락(Intent Lock)

내재 락은 앞서 소개한 락들과 사뭇 다른 기능을 한다

내재 락은 사용자가 요청한 범위에 대한 락(ex, 테이블 락)을 걸 수 있는지 여부를 빠르게 파악하기 위해 사용되는 락이다. 내재 락은 공유 락과 베타 락 앞에 I 기호를 붙인 IS, IX, SIX 등이 있다


💡블로킹 (Blocking)

: Lock 간의 경합(Race Condition)이 발생하여 특정 Transaction이 작업을 진행하지 못하고 멈춰선 상태를 말한다. 공유락끼리는 블로킹이 발생하지 않지만, 베타락은 블로킹을 발생시킨다.

블로킹을 해소하기 위해서는 이전 트랙잭션이 완료(commit or rollback) 되어야 함!!

  • 뒤에 들어온 트랜잭션은 이전 트랜잭션이 마무리되어야 이후 진행이 가능하다.
  • 성능에 좋지 않은 영향을 미친다. 따라서 경합을 최소화 할 필요 → 트랜잭션 처리 시간을 짧게

💡교착상태 (DeadLock)

: 교착상태는 두 트랜잭션이 각각 Lock을 설정하고 서로의 Lock에 접근하여 값을 얻어오려고 할 때 이미 각각의 트랜잭션에 의해 Lock이 설정되어 있기 때문에 양쪽 트랜잭션 모두 영원히 처리가 되지않게 되는 상태

 

위와 같이 각각의 트랜잭션에 Lock을 걸고 상대방 Lock에 접근하여 반환 받지 못하는 상황에서 Dead Lock이 발생하게 된다

출처: https://devfunny.tistory.com/668

(상황 예시)1) Shared Lock + Exclusive Lock

= 트랜잭션 A가 Shared Lock을 설정하고 sleep 되었을때, 트랜잭션 B가 해당 데이터에 Exclusive Lock을 걸려고 하면 무기한 기다려야하는 교착상태에 빠지게된다.

2) Exclusive Lock + Exclusive Lock

= 트랜잭션 A에서 Exclusive Lock을 걸었을때 트랜잭션 B에서도 다른 데이터에 Exclusive Lock을 걸었다. 이 경우 서로의 Lock된 데이터에 접근하려고할 때 기존의 Lock이 해제될 때까지 기다리게된다.

 

💡교착상태 (DeadLock) 해결방법

1. Dead Lock이 감지되면 둘 중 하나의 트랜잭션을 강제 종료한다

실제로, Oracle 에서는 데드락이 감지되면 한쪽 Transaction을 강제로 풀어버린다

이렇게 되면 하나의 트랜잭션A의 마지막 실행 내용에 오류가 발생되고 커밋이 발생되도록 유지한다

또 다른 트랜잭션 B는 아직 대기중이며, 트랜잭션 A의 커밋을 기다린다

2. Dead Lock 방지를 위해 접근 순서를 동일하게 하는 것이 중요 →접근 순서 규칙을 정해야 함

 


출처 및 참고자료

[DB] Lock이란?

DB Lock

DB Lock

반응형
Share Link
reply
반응형
«   2025/02   »
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