데이터베이스의 병행 제어(Concurrency Control) 란 여러 사용자가 동시에 데이터베이스에 접근하여 트랜잭션을 수행할 때, 데이터의 일관성과 무결성을 유지하기 위해 트랜잭션 간의 충돌과 부작용을 방지하는 기법입니다.
병행 제어(Concurrency Control)의 필요성
여러 트랜잭션이 데이터베이스에 동시에 접근할 때 다음과 같은 문제가 발생할 수 있으므로 병행 제어가 필요합니다.
1. 갱신 분실(Lost Update)
두 개 이상의 트랜잭션이 같은 데이터를 동시에 수정할 때, 한 트랜잭션의 갱신 결과가 다른 트랜잭션에 의해 덮어쓰여 사라지는 현상
2. 더티 리드(Dirty Read)
한 트랜잭션이 아직 완료되지 않은 데이터를 다른 트랜잭션이 읽는 현상
3. 모순성(Inconsistent Analysis)
트랜잭션이 데이터 처리 도중 다른 트랜잭션의 변경사항으로 인해 일관성이 없는 데이터를 읽는 현상
4. 반복 불가능한 읽기(Non-repeatable Read)
한 트랜잭션이 같은 데이터를 여러 번 읽을 때, 다른 트랜잭션이 데이터를 변경하여 매번 다른 결과를 읽게 되는 현상
데이터베이스 병행 제어의 주요 기법
1. 로킹(Locking) 기법
데이터에 접근 전 잠금(Lock) 을 설정하고 작업이 끝나면 잠금을 해제하는 방식
대표적인 프로토콜: 2단계 로킹(2PL, Two-Phase Locking)
✓ 확장 단계(Growing Phase) : 필요한 모든 Lock을 획득
✓ 축소 단계(Shrinking Phase): Lock을 하나씩 해제 (한 번 해제 시작 후 다시 획득 불가)
2. 타임스탬프(Timestamp) 기법
트랜잭션이 시스템에 들어올 때 각 트랜잭션에 고유의 타임스탬프를 부여하고, 타임스탬프 순서에 따라 트랜잭션 실행 순서를 제어
트랜잭션 순서를 엄격하게 관리하여 충돌 방지
3. 낙관적(Optimistic) 병행 제어 기법
트랜잭션이 충돌 없이 정상 완료될 것을 가정하고 실행 후, 완료 시점에서 검증하여 충돌 시 트랜잭션을 재실행하거나 취소
충돌이 적을 것으로 예상되는 환경에서 유용
4. 다중 버전 병행 제어(MVCC, Multi-Version Concurrency Control)
데이터의 여러 버전을 유지하여, 트랜잭션들이 서로 다른 버전의 데이터를 접근할 수 있도록 허용
읽기 트랜잭션은 과거 버전을 참조하여, 읽기-쓰기 충돌을 최소화하는 방식
오라클, PostgreSQL 등에서 사용되는 기법
5. 기법 비교
기법 | 특징 | 장점 | 단점 |
로킹 기법 | 데이터 접근 시 Lock 설정 | 단순하고 안정적 | 교착상태(Deadlock) 발생 가능 |
타임스탬프 기법 | 타임스탬프 기반 실행 순서 제어 | 교착상태 없음 | 트랜잭션 처리 지연 발생 가능 |
낙관적 기법 | 충돌 없다고 가정 후 사후 검증 | 충돌이 적은 환경에서 성능 우수 | 충돌 빈발 시 재실행 부담 |
다중 버전 병행제어(MVCC) | 여러 데이터 버전을 관리 | 동시성, 성능 우수 | 버전 관리로 인한 저장공간 필요 |
병행 제어 기법을 통해 다중 사용자 환경에서 데이터베이스의 일관성과 무결성을 보장하고, 시스템의 성능과 신뢰성을 유지할 수 있습니다. 데이터베이스의 안정적인 운영을 위해서는 적절한 병행 제어 기법을 선택하여 활용하는 것이 필수적입니다.
'IT > Oracle' 카테고리의 다른 글
ORA-12547 : TNS:lost contact 에러 원인 및 해결 방법 (2) | 2025.02.27 |
---|---|
오라클 스마트 스캔 - 직접 경로 읽기 (2) | 2025.02.25 |
Oracle 19c - JSON 활용 방법 (1) | 2025.02.25 |
오라클 프로시저 상태 조회 (0) | 2025.02.25 |
병합 조인(Cartesian Join) 비용 증가 (1) | 2025.02.24 |