"시스템이 Lock에 걸릴 수 있는 케이스를 경험해 보시거나, 아시는 부분에 대해서 설명해 주실 수 있을까요?"

데이터베이스에서의 락은 동시에 여러 사용자 혹은 프로세스가 동일한 테이블에 접근하는 것을 제어 하기 위한 것과 비슷합니다. 락을 통해서 데이터의 일관성 혹은 동시에 발생하는 충돌이나 Race condition을 방지 하기 위함입니다.

  1. 동시성 제어: 여러 사용자 또는 프로세스가 동시에 동일한 테이블에 접근하는 경우, 테이블 락을 사용하여 데이터의 일관성을 유지하고 충돌을 방지합니다.
  2. 트랜잭션 격리: 트랜잭션 수준에서 테이블 락을 사용하여 동시성 제어 및 격리 수준을 설정할 수 있습니다. 다양한 격리 수준을 제공하여 트랜잭션 간의 상호작용을 관리합니다.
  3. 데이터 무결성 유지: 테이블 락을 사용하여 데이터의 일관성과 무결성을 유지할 수 있습니다. 여러 작업이 동시에 발생할 때, 락을 사용하여 데이터의 정합성을 보장합니다.

Shared Lock (s lock, 공유락)

공유 락은 여러 사용자가 동시에 동일한 테이블을 읽을 수 있도록 허용합니다. 즉, 읽기 작업에 대한 락을 설정합니다. 공유 락이 설정되면 다른 사용자도 동일한 테이블에 대한 공유 락을 획득할 수 있지만, 배타적인 락인 배타 락(exclusive lock)은 획득할 수 없습니다.

Exclusive Lock (x lock, 배타락)

배타 락은 한 사용자가 테이블을 배타적으로 접근하고 수정할 수 있도록 허용합니다. 배타 락이 설정되면 다른 사용자는 해당 테이블에 대한 공유 또는 배타 락을 획득할 수 없으며, 읽기 및 쓰기 작업을 수행할 수 없습니다.

Lock Level

  1. Row level, 변경하려는 row에만 lock을 설정하는 것을 의미합니다.
  2. Page level, 변경하려는 row가 담긴 데이터 page 에 lock을 설정합니다.
  3. Tabel level, 테이블과 인덱스에 모두 잠금을 설정합니다.
  4. Database level, 데이터베이스를 복구하거나 스키마를 변경할 때 발생합니다.

Dead Lock ( 교착 상태 )