CS
[CS / TOPCIT] 동시성 제어
따봉치치
2023. 5. 8. 18:16
트랜잭션
하나의 논리적인 작업 단위를 이루는 여러 연산들의 집합, 한번에 수행되어야 할 데이터베이스의 일련의 읽기와 쓰기 연산을 수행하는 단위
- Atomicity(원자성)
- Consistency(일관성)
- Isolation(고립성) : 트랜잭션의 Commit 또는 Rollback이 발행되기 전에 다른 트랜잭션이 끼어들어서 처리하면 안됨
- Durability(영속성) : 한번 성공한 트랜잭션은 지속성을 보장해야 함
트랜잭션 종료 시 연산
- Commit (트랜잭션 종료 연산) : 트랜잭션 안에서 수행한 모든 SQL 문장들의 결과를 데이터베이스에 영구적으로 반영하면서 해당 트랜잭션을 종료하는 연산
- Rollback (트랜잭션 복귀 연산) : 지금가지 수행해왔던 트랜잭션 안에서 변경된 모든 데이터 값을 트랜잭션 수행 이전 상태로 되돌리는 연산
동시성 제어
다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜적션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
- 직렬가능스케쥴(Serializable)의 생성 또는 트랜잭션들의 직렬가능성 보장
- 공유도 최대, 응답시간 최소, 시스템 활동의 최대 보장
- 데이터의 무결성 및 일관성 보장
동시성 제어를 하지 않았을 경우 발생하는 문제점
- 갱신 손실 : 이전 트랜잭션의 종류 전에 갱신 값을 덮어쓰는 오류
- 오손 데이터읽기 : 트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
- 모순성 : 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제
- 연쇄복귀 : 특정 트랜잭션이 처리를 취소한 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능
- 반복할 수 없는 읽기 : 한 트랜잭션에서 같은 질의를 두 번 수행할 때 두 질의의 결과가 다르게 나타나는 현상
2PL(2-Phase Locking) 기법
- 확장단계 : 트랜잭션은 Lock만 수행할 수 있고 Unlock은 수행할 수 없는 단계
- 수축단계 : 트랜잭션은 Unlock만 수행할 수 있고 Lock은 수행할 수 없는 단계
트랜잭션 격리수준
1. 완료되지 않은 읽기 (Read Uncommitted) : 트랜잭션에서 처리 중인 아직 완료되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
2. 완료된 읽기 (Read Committed) : 트랜잭션이 완료되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용
3. 반복 읽기 (Repeatable Read)
4. 직렬화 (Serialized Read)
교착상태 (Deadlock)
다중처리 환경 또는 다중 트랜잭션 데이터베이스 시스템에서 다수의 프로세스 또는 트랜잭션이 특정자원의 할당을 무한정 기다리고 있는 상태
교착상태 발생 조건
- 상호배제 : 프로세스들이 자원을 배타적으로 점유하여 다른 프로세스가 그 자원을 사용하지 못함
- 점유와 대기 : 프로세스가 어떤 자원을 할당 받아 점유하고 있으면서 다른 자원을 요구
- 비선점 : 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없으며, 점유하고 있는 프로세스 자신만이 해제 가능
- 환형 대기 : 프로세스간 자원 요구가 하나의 원형을 구성