병행 제어 기법(Concurrency Control)
✒️ 2025-05-28 16:00 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용 일부를 참고하여 정리
동시에 여러 트랜잭션이 실행될 때 데이터 충돌 없이 동작하도록 조절하는 기법
- 데이터베이스의 공유를 최대화하고, 시스템의 활용도를 최대화하기 위해 사용한다.
- 데이터베이스의 일관성(Consistency)을 유지하고, 동시성을 확보하여 성능을 향상 시킬 수 있다.
- 사용자에 대한 응답 시간을 최소화할 수 있다.
1. 로킹(Locking)
- 하나의 트랜잭션을 실행하는 동안 다른 트랜잭션이 동시에 접근할 수 없도록 데이터를 잠근다.
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있다.
- 로킹 단위 : 한꺼번에 로킹할 수 있는 객체의 크기
- 로킹 단위가 작아지면 데이터베이스 공유도가 증가하지만, 로킹 오버헤드가 증가한다.
2. 낙관적 검증(Optimistic Validation)
- 트랜잭션에 검증을 수행하지 않고 일단 트랜잭션을 수행한 뒤, 종료 직전에 검증을 수행해서 데이터베이스에 반영한다.
- 충돌이 적은 읽기 위주의 환경에 유리하다.
- 검증 실패 시 되돌리는 작업이 필요하다.
3. 타임 스탬프 순서(Time Stamp Ordering)
- 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 트랜잭션이 실행 되기 전에 타임 스탬프를 부여하여 그 순서에 따라 트랜잭션 작업을 수행한다.
- 시간 기준으로 트랜잭션을 관리할 수 있으며, 먼저 시작한 트랜잭션이 우선권을 가진다.
- 데드락이 발생하지 않으나 충돌이 많으면 롤백이 자주 발생한다.
4. 다중버전 동시성 제어(MVCC; Multi Version Concurrency Control)
- 데이터들의 이전 버전을 여러 개 저장하여 각 트랜잭션의 타임 스탬프를 기준으로 해당 시점에 맞는 데이터 버전을 읽게 해준다.
- 직렬가능성 : 여러 트랜잭션이 동시에 실행되더라도, 결과가 트랜잭션을 순서대로(직렬로) 수행한 것과 같은 상태가 되는 것
5. 2PC(2 Phase Commit)
- 분산된 데이터베이스 또는 서버에서 트랜잭션을 모두 동일하게 성공시켜 시스템에서 트랜잭션의 일관성을 유지하기 위한 기법이다.
- 1단계 : 트랜잭션 수행 결과를 다른 분산 시스템에 알린다.
- 2단계 : 모든 분산 시스템에서 트랜잭션 수행 결과가 일치하는지 확인한다. 성공했다면 Commit을 수행하고, 실패하면 Rollback을 수행한다.
- 여러 시스템의 데이터베이스에서 데이터 일관성을 보장할 수 있다.
- 연결된 모든 시스템의 응답을 대기해야 하므로 느릴 수 있으며, 일부 시스템이 죽으면 대기 상태에 빠질 수 있다.