DBMS에서 트랜잭션과 동시성 제어는 데이터의 일관성과 시스템의 효율성을 유지하는 데 핵심적인 역할을 한다.
1. 트랜잭션(Transaction)이란?
트랜잭션은 DBMS에서 더 이상 나눌 수 없는 작업의 단위이다. 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다.
트랜잭션의 특징(ACID)
- 원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나, 전혀 수행되지 않아야 한다.
- 일관성(Consistency): 트랜잭션 실행 전후의 데이터베이스 상태가 일관되어야 한다.
- 독립성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다.
- 지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다.
트랜잭션의 예시
START TRANSACTION
-- 아래 블록의 명령어들은 하나의 단위로 처리됨
-- 모두 성공하거나, 모두 실패한다.
A의 계좌에 돈이 얼마나 있는지 읽기;
A의 계좌 잔액이 1000원 보다 많은지 확인하기;
A의 계좌에서 1000원 인출하기;
A의 계좌에 남은 금액 작성하기;
COMMIT
2. 동시성 제어(Concurrency Control)
동시성 제어는 여러 사용자나 프로그램이 동시에 데이터베이스에 접근할 때 데이터의 일관성을 유지하면서 최대한의 성능을 보장하는 기술이다.
동시성 제어의 필요성
- CPU 자원의 효율적 활용
- 디스크 I/O 작업으로 인한 대기 시간 최소화
- 여러 사용자의 동시 접근 지원
동시성 제어 메커니즘
- 락(Lock) 기반 제어:
- 공유 락(Shared Lock): 읽기 작업에 사용
- 전용 락(Exclusive Lock): 쓰기 작업에 사용
- 트랜잭션 스케줄링:
- DBMS는 여러 트랜잭션의 동시 실행을 관리하여 직렬 실행과 동등한 결과가 나오도록 보장한다.
- 데드락(Deadlock) 처리:
- 교착 상태 발생 시 하나의 트랜잭션을 중단하고 재시작하는 방식으로 해결한다.
3. 트랜잭션의 원자성 보장
DBMS는 시스템 충돌 상황에서도 트랜잭션의 원자성을 보장해야 한다.
원자성 보장 메커니즘
- 로깅(Logging):
- 모든 데이터베이스 작업을 로그에 기록합니다.
- WAL(Write-Ahead Logging) 프로토콜:
- 데이터 변경 전 로그를 먼저 기록하여 안정성을 확보한다.
- 복구(Recovery):
- 시스템 충돌 후 로그를 사용하여 부분적으로 실행된 트랜잭션의 효과를 취소한다.
댓글