Database Lock
포스트
취소

Database Lock

Database Lock이란?

  • 여러 트랜잭션이 동시에 처리될 때 데이터의 무결성을 보장하기 위한 수단
  • 한 트랜잭션이 처리되고 있을 때, 다음 트랜잭션을 잠시 대기시컀다가 처리해 순차적으로 처리시킨다.

Lock의 종류

공유 락 (Shared Lock, Lock-S)

  • 데이터를 읽을 때 사용하는 Lock이다.
    • 그래서 Read Lock이라고 부른다.
  • 공유 락이 설정된 데이터에는 다른 공유 락의 접근이 가능하다.
    • 하나의 데이터를 여러 사람이 동시에 읽는 것은 가능하다라는 걸 의미한다.
    • 그러나 공유 락이 설정된 데이터에는 배타 락은 접근할 수 없다.

배타 락 (Exclusive Lock, Lock-X)

  • 데이터를 변경할 때 사용하는 Lock
    • 그래서 Write Lock이라고 부른다.
  • 배타 락이 설정된 데이터에 관해서는 다른 공유락 배타 락을 설정할 수 없다.
  • 배타 락은 해당 트랜잭션이 완료될 때까지 유지된다.

Lock에서 발생할 수 있는 문제점

  • 블로킹 (Blocking)
    • Lock간의 경합(“공유 ↔ 배타” 또는 “배타 ↔ 배타”)이 발생 했을 때 트랜잭션이 멈춰선 상태
    • 먼저 진행된 트랜잭션이 COMMIT 되거나 ROLLBACK되어야 진행이 가능하다.
  • 교착상태 (DeadLock)
    • 두 트랜잭션이 각자 다른 데이터에 배타 락을 설정해둔 후에,
      서로 상대방의 데이터에 락을 설정하려고 할 때 발생한다.
    • 두 트랜잭션 모두 동작이 멈추게 된다.

관련 쿼리

Lock 확인하기

SHOW PROCESSLIST; /* 최대 100건 */
SHOW FULL PROCESSLIST; /* 모든 건수 노출 */

Lock 해체하기

KILL ID;
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.