Lock이란?

같은 자원을 액세스하려는 다중 트랜잭션 환경에서 순차적 진행을 보장할 수 있는 직렬화 장치

Shared Lock

  • 다른 사용자가 같이 읽는 것을 허용하지만, 변경하는 것은 허용하지 않는 Lock
  • S Lock 사용시, 여러 트랜잭션이 동시에 하나의 개체를 읽을 수 있다. 즉 공유 잠금간에는 충돌되지 않는다.
  • S Lock 사용 시, 데이터를 변경할 수 없다.
  • 다음 행을 읽을 때, 현재 행의 공유 잠금을 해제한다.

Exclusive Lock

  • 다른 사용자가 읽는 것, 변경하는 것 모두 허용하지 않는 Lock
  • 트랜잭션이 데이터를 변경할 때 단독 잠금한다.
  • X Lock이 걸린 데이터는 다른 트랜잭션이 S Lock, X Lock을 걸 수 없다.
  • 오직 하나의 트랜잭션만이 데이터에 대한 X Lock을 걸 수 있다.

Update Lock

  • 트랜잭션이 변경할 데이터를 찾으면 거는 락
  • 나중에 데이터를 변경할 때 까지 데이터가 변경하지 않았음을 확신하기 위해 건다.
  • 한 번에 한 트랜잭션만 업데이트 잠금을 얻을 수 있어 데드락을 방지할 수 있다.
  • U Lock이 걸린 데이터는 다른 트랜잭션이 U Lock, X Lock을 걸 수 없지만 S Lock은 가능하다.

Blocking

  • 락들간 경합이 생하여 특정 세션이 작업을 진행하지 못하고 멈춰선 상태를 말한다.
  • S Lock - X Lock, X Lock - X Lock간 블로킹이 발생할 수 있다.
  • 해결방안 :
    • Transaction Commit 혹은 Rollback

Deadlock

  • 두 세션이 각각 Lock을 설정한 리소스를 서로 액세스 하려고 마주보며 진행하는 상황
  • 해결방안 :
    • 한쪽 트랜잭션 처리 강제 종료

oksusutea's blog

꾸준히 기록하려고 만든 블로그