- Category: Computer Science
- Topic: Lock(DB에서의 (Table/Row) Lock)
- Topic Comment: Lock이 걸릴 수 있는 케이스들은 대략적으로 알고 있어야 한다고 생각해요.
"시스템이 Lock에 걸릴 수 있는 케이스를 경험해 보시거나, 아시는 부분에 대해서 설명해 주실 수 있을까요?"
데이터베이스에서의 락은 동시에 여러 사용자 혹은 프로세스가 동일한 테이블에 접근하는 것을 제어 하기 위한 것과 비슷합니다. 락을 통해서 데이터의 일관성 혹은 동시에 발생하는 충돌이나 Race condition을 방지 하기 위함입니다.
- 동시성 제어: 여러 사용자 또는 프로세스가 동시에 동일한 테이블에 접근하는 경우, 테이블 락을 사용하여 데이터의 일관성을 유지하고 충돌을 방지합니다.
- 트랜잭션 격리: 트랜잭션 수준에서 테이블 락을 사용하여 동시성 제어 및 격리 수준을 설정할 수 있습니다. 다양한 격리 수준을 제공하여 트랜잭션 간의 상호작용을 관리합니다.
- 데이터 무결성 유지: 테이블 락을 사용하여 데이터의 일관성과 무결성을 유지할 수 있습니다. 여러 작업이 동시에 발생할 때, 락을 사용하여 데이터의 정합성을 보장합니다.
Shared Lock (s lock, 공유락)
공유 락은 여러 사용자가 동시에 동일한 테이블을 읽을 수 있도록 허용합니다. 즉, 읽기 작업에 대한 락을 설정합니다. 공유 락이 설정되면 다른 사용자도 동일한 테이블에 대한 공유 락을 획득할 수 있지만, 배타적인 락인 배타 락(exclusive lock)은 획득할 수 없습니다.
Exclusive Lock (x lock, 배타락)
배타 락은 한 사용자가 테이블을 배타적으로 접근하고 수정할 수 있도록 허용합니다. 배타 락이 설정되면 다른 사용자는 해당 테이블에 대한 공유 또는 배타 락을 획득할 수 없으며, 읽기 및 쓰기 작업을 수행할 수 없습니다.
Lock Level
- Row level, 변경하려는 row에만 lock을 설정하는 것을 의미합니다.
- Page level, 변경하려는 row가 담긴 데이터 page 에 lock을 설정합니다.
- Tabel level, 테이블과 인덱스에 모두 잠금을 설정합니다.
- Database level, 데이터베이스를 복구하거나 스키마를 변경할 때 발생합니다.
Dead Lock ( 교착 상태 )
- 두 개 혹은 그 이상의 프로세스나 스레드가 상호 간의 소유 리소스를 획득하지 못하고 무한히 기다리는 상태입니다.