데드락(Deadlock)과 일반 락(Lock)은 병행 처리(Concurrency) 환경에서 발생하는 문제와 해결 방식에 대한 중요한 개념입니다.
일반 락 (Lock)
Lock은 데이터베이스 관리 시스템(DBMS) 또는 다중 스레드 환경에서 데이터 무결성을 유지하기 위한 메커니즘입니다.
락은 리소스에 대한 동시 액세스를 제어하고, 동시에 여러 프로세스 또는 스레드가 동일한 리소스에 동시에 액세스하지 못하도록 보장합니다.
일반 락은 공유 락(Shared Lock)과 배타 락(Exclusive Lock) 두 가지 주요 유형이 있습니다.
공유 락은 동시에 여러 프로세스가 읽을 수 있지만 쓸 수 없는 락입니다.
반면에 배타 락은 쓰기 작업을 하기 위해서는 해당 리소스에 배타적인 액세스 권한을 요청하며, 다른 프로세스가 접근하지 못하도록 합니다.
데드락 (Deadlock)
데드락은 병행 처리 환경에서 락을 사용할 때 발생할 수 있는 문제로, 두 개 이상의 프로세스나 스레드가 서로 상대방이 소유한 리소스를 기다리며 무한히 대기하고 있는 상황을 말합니다.
데드락 상태에서는 어떤 프로세스도 진행할 수 없으며, 시스템이 멈추거나 혹은 서비스가 중단될 수 있습니다.
데드락은 주로 배타적 락을 사용하는 환경에서 발생하며, 다른 프로세스가 현재 락을 가진 프로세스가 소유한 락을 기다리면서 발생합니다.
데드락과 일반 락의 주요 차이점
목적: 일반 락은 데이터 무결성과 공유 리소스 관리를 위해 사용되며, 데이터베이스와 다중 스레드 환경에서 동시 액세스 문제를 해결합니다. 데드락은 일반 락의 부적절한 사용으로 인해 발생하는 문제입니다.
상황: 일반 락은 시스템에서 필요한 리소스를 안전하게 사용하는 데 도움을 주며, 대부분의 경우 원하는 락을 얻지 못한 경우 일정 시간 동안 기다리다가 포기할 수 있습니다. 데드락은 서로가 서로를 기다리는 상태에서 무한 대기하는 상황을 말합니다.
해결: 데드락은 복잡하며, 다양한 해결 전략이 있습니다. 이를 위해 데드락 탐지, 데드락 예방, 데드락 회피 등 다양한 기술과 알고리즘이 사용됩니다. 반면에 일반 락은 리소스에 대한 제어를 위한 단순한 메커니즘으로, 주로 데이터 무결성을 지키기 위해 사용됩니다.
'DB > DB정보' 카테고리의 다른 글
DB 정규화 (0) | 2023.11.07 |
---|---|
Slow Query (0) | 2023.10.04 |
DCL / DML / DDL / TCL (0) | 2023.08.31 |
CDB와 On-premise (0) | 2023.08.25 |