DB lock

정하윤·2023년 9월 2일
0

DB lock

낙관적 잠금(Optimisstic Lock)

  • 데이터 갱신 시 경합이 발생하지 않을 것이라고 봄
  • 한 사용자가 업데이트를 완료하면, 동시 업데이트 확약을 시도하는 다른 사용자들에게 충돌이 있음을 알림
  • 동시 업데이트가 거의 없는 경우 사용

비관적 잠금(Pessimistic Lock)

  • 동일한 데이터를 동시에 수정 할 가능성이 높다라고 봄
  • 다른 사용자는 먼저 시도한 사용자가 변경을 확약해서 레코드 잠금을 릴리스할 때까지 대기해야 함
  • 동시 업데이트가 빈번한 경우, 외부 시스템과 연동한 경우에 사용

비관적 잠금 연산의 종류

공용락(shared lock)

  • read 연산 실행 가능, write연산 실행 불가능
  • 데이터에 대한 사용권을 여러 트랜잭션이 함께 가질 수 있음

베타락(exclusive lock)

  • read 연산과 write 연산을 모두 실행 가능
  • 베타 lock 연산을 실행한 트랜잭션만 해당 데이터에 대한 독점권을 가짐

발생할수있는문제점(블록킹)

  • Lock들의 경합이 발생하여 특정 세션의 작업을 진행하지 못하고 멈춰 선 상태
  • 데이터에 대해서 하나의 트랜잭션이 베타 lock을 걸면 다른 트랜잭션들은 어떠한 lock도 걸지 못하고 대기해야하기 때문에 발생한다.

블록킹(Blocking)해결 방안

  • 트랜잭션을 짧게 정의한다.
  • 같은 데이터를 갱신하는 트랜잭션이 동시에 수행하지 않도록 설계한다.
  • Lock timeout을 이용하여 잠금해제 시간을 조절한다.

발생할수있는문제점(데드락)

  • 시스템 자원에 대한 요구가 뒤엉킨 상태 즉, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한대기에 빠지는 상황을 말한다.

**데드락(교착상태)의 해결법**

  • 트랜잭션 진행방향을 같은방향으로 처리한다.
  • 트랜잭션 처리속도를 최소화 한다.
  • Lock timeout을 이용하여 잠금해제 시간을 조절한다.

0개의 댓글