Transaction Concurrency Control
Transaction Concurrency Control (동시성 제어)
📝 Concurrency Control이란?
어떤 schedule도 Serializable하고 Recoverable하게 동작하도록 해주는 것
ACID 중 Isolation과 관련
🔄 Serializability
Serial Schedule
트랜잭션들이 겹치지 않고 한 번에 하나씩 실행
장점: 순서와 정합성 보장
단점: 성능 저하 (CPU 낭비)
Non-Serial Schedule
트랜잭션들이 겹쳐서(interleaving) 실행
장점: 동시성 높아져 성능 향상
단점: 이상 현상 발생 가능**
⭐ Conflict Serializable
Serial schedule과 conflict equivalent일 때
Non-serial schedule이지만 정상적인 결과
Conflict
두 operation이 세 조건 모두 만족:
- 서로 다른 트랜잭션 소속
- 같은 데이터 접근
- 최소 하나는 write operation
Conflict operation은 실행 순서 바뀌면 결과도 바뀜
Conflict Equivalent
두 schedule이 두 조건 모두 만족:
- 같은 transaction 보유
- Conflict operation 실행 순서 동일
💡 Recoverability
트랜잭션 실패 시 회복 가능성
Rollback 시 다른 트랜잭션이 영향받지 않는 것
Unrecoverable Schedule
Rollback해도 이전 상태로 회복 불가능
DBMS가 허용하면 안 됨
Commit된 transaction이 rollback된 transaction의 write 데이터를 읽은 경우
DIRTY READ 발생
Recoverable Schedule
자신이 읽은 데이터를 write한 transaction이 먼저 commit/rollback 될 때까지 commit하지 않음
Cascading Rollback 발생 가능
- 한 트랜잭션 rollback 시 의존 트랜잭션도 함께 rollback
- 비용이 큼
Cascadeless Schedule
Commit되지 않은 write 데이터는 읽지도 않음
Cascading Rollback 방지
하지만 write 충돌 가능
Strict Schedule
Commit되지 않은 write 데이터는 읽지도 쓰지도 않음
가장 엄격한 스케줄
Write 충돌 방지
📊 Schedule 계층
Strict Schedule
⊂ Cascadeless Schedule
⊂ Recoverable Schedule
⊂ All Schedules
❓ 면접 질문 예시
Q1. Concurrency Control이란 무엇인가요?
답변: Concurrency Control은 어떤 schedule도 Serializable하고 Recoverable하게 동작하도록 해주는 것입니다. ACID 중 Isolation과 관련이 있으며, 복수의 트랜잭션을 동시에 실행할 때 이상 현상이 일어나지 않도록 보장합니다.
Q2. Serial Schedule과 Non-Serial Schedule의 차이는?
답변: Serial Schedule은 트랜잭션들이 겹치지 않고 한 번에 하나씩 실행되어 순서와 정합성이 보장되지만 성능이 저하됩니다. Non-Serial Schedule은 트랜잭션들이 겹쳐서 실행되어 동시성이 높아지고 성능이 향상되지만 이상 현상이 발생할 수 있습니다.
Q3. Conflict Serializable이란?
답변: Conflict Serializable은 serial schedule과 conflict equivalent일 때를 말합니다. Non-serial schedule이지만 conflict operation의 실행 순서가 serial schedule과 동일하여 정상적인 결과를 낼 수 있습니다. RDBMS는 conflict serializable한 non-serial schedule을 허용하여 성능과 정합성을 모두 확보합니다.
Q4. Recoverable Schedule과 Unrecoverable Schedule의 차이는?
답변: Unrecoverable Schedule은 rollback해도 이전 상태로 회복이 불가능한 스케줄로, commit된 transaction이 rollback된 transaction의 write 데이터를 읽은 경우입니다. Recoverable Schedule은 자신이 읽은 데이터를 write한 transaction이 먼저 commit/rollback될 때까지 commit하지 않아 회복이 가능합니다.
Q5. Strict Schedule이 필요한 이유는?
답변: Cascadeless Schedule은 commit되지 않은 write 데이터를 읽지 않지만, 여전히 write 충돌이 발생할 수 있습니다. Strict Schedule은 commit되지 않은 write 데이터를 읽지도 쓰지도 않아 write 충돌까지 방지하는 가장 엄격한 스케줄입니다.
📚 원본 참고 자료
출처: 2023-CS-Study
- 링크: db_transaction_concurrency-control.md
- 내용: Concurrency Control, Serializability, Recoverability