🤔 동시성 제어란 ?
동시성 제어는 여러 트랜잭션을 동시에 실행하면서도 데이터베이스의 일관성과 격리성을 보장하기 위한 기법이다.
여러 사용자가 동시에 같은 데이터에 엑세스할 때 충돌을 방지하는데 필요하다.
💯동시성 제어의 두 가지 기법
< 잠금(Locking)> < 타임스탬프(Timestamp)>
잠금(Locking) 기법: 잠금 기법에서는 데이터 항목에 대해 '잠금(lock)'을 설정하여 다른 트랜잭션들이 해당 데이터에 액세스하는 것을 제한한다. 잠금은 일반적으로 '읽기 잠금(공유 잠금)'과 '쓰기 잠금(배타적 잠금)'의 두 가지 유형이 있다. 읽기 잠금은 해당 데이터 항목을 읽을 수는 있지만 수정할 수는 없게 하며, 쓰기 잠금은 해당 데이터 항목을 읽거나 쓸 수 있는 트랜잭션을 한 개로 제한한다.
타임스탬프(Timestamp) 기법: 타임스탬프 기법에서는 각 트랜잭션에 고유한 타임스탬프를 할당하여 트랜잭션의 순서를 정한다. 이 기법은 트랜잭션들이 동일한 데이터에 대해 순차적으로 액세스하도록 강제함으로써 충돌을 방지한다.
이러한 기법들을 통해 DBMS는 동시에 실행되는 여러 트랜잭션들 사이에서 데이터의 일관성을 유지하고 무결성을 보장한다.
🥺 < 동시성 제어를 하지 않을 시 발생하는 문제 >
갱신 손실 (Lost Update): 두 트랜잭션이 동시에 같은 데이터를 변경하려고 할 때, 한 트랜잭션의 변경이 다른 트랜잭션에 의해 덮어쓰여질 수 있다.
비완료 의존성 (Dirty Read): 한 트랜잭션이 아직 커밋되지 않은 변경을 읽는 경우, 그 트랜잭션이 롤백되면 일관성 없는 데이터를 보게 될 수 있다.
계층형 읽기 (Non-repeatable Read): 한 트랜잭션 도중에 같은 데이터를 두 번 이상 읽는 경우, 그 사이에 다른 트랜잭션이 그 데이터를 변경하고 커밋할 경우, 같은 트랜잭션 내에서 데이터의 일관성이 깨질 수 있다.
팬텀 읽기 (Phantom Read): 한 트랜잭션 도중에 일련의 행 (예를 들어, 특정 조건을 충족하는 행)을 두 번 이상 읽는 경우, 그 사이에 다른 트랜잭션이 새 행을 삽입하고 커밋할 경우, 같은 트랜잭션 내에서 일련의 행이 변경되는 현상을 볼 수 있다.
Reference :
GeeksforGeeks - Concurrency Control in DBMS
TutorialsPoint - DBMS Concurrency Control
'SQL 이론' 카테고리의 다른 글
SQL Joins (0) | 2023.05.17 |
---|---|
정규화(Normalization) (0) | 2023.05.16 |
DataBase Key (0) | 2023.05.16 |
DBMS(Database Management System) (0) | 2023.05.16 |
DataBase 일관성/무결성 제약 조건 (0) | 2023.05.16 |