데이터 동시 접근의 문제
동일 데이터에 다수 사용자의 접근 허용 시 일관성이 훼손
트랜잭션
트랜잭션 개념
- 데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 일련의 연산의 집합
- 데이터베이스를 사용하여 처리하는 작업을 하나의 묶음으로 인식하여 묶음 단위로 실행되도록 정의한 개념
트랜잭션의 특징
- 다수의 연산으로 구성된 트랜잭션이 사용자에게 단일작업처럼 다뤄지도록 ACID 특징을 준수
- ACID 특성
- 원자성(atomicity): 하나의 트랜잭션에 포함된 모든 연산은 완전히 수행되거나 전혀 수행되지 않음
- 일관성(consistency): 특정 트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태를 유지
- 고립성(isolation): 특정 트랜잭션이 데이터베이스를 갱신하는 동안 다른 트랜잭션에 의해 방해받지 않음
- 지속성(durability): 완료된 트랜잭션의 결과는 어떠한 시스템의 장애에도 데이터베이스에 반영되어야 함
트랜잭션 연산자
- 트랜잭션의 연산
- Read(X): 데이터베이스에서 데이터 X를 읽고, 트랜잭션이 실행되는 메모리의 변수 X에 값을 저장하는 연산
- Write(X): 트랜잭션이 실행되는 메모리에 있는 변수 X의 값을 데이터베이스에 저장하는 연산
- 트랜잭션 실행의 연산
- Commit: 트랜잭션 연산에 의해 갱신된 데이터 항목의 값을 데이터베이스에 반영시키고 지속성을 확보하는 연산
- Rollback: 트랜잭션이 중단되기 이전까지 수행한 연산에 의해 갱신된 모든 데이터 항목의 값을 무효화하여 일관성을 확보하는 연산
트랜잭션의 5가지 상태 변화
- 동작: 트랜잭션이 시작을 준비 또는 실행 중인 상태
- 부분 커밋: 마지막 연산을 실행한 직후의 상태
- 커밋: 모든 실행이 성공적으로 완료된 후의 상태
- 실패: 실행이 정상적으로 진행될 수 없는 상태
- 중단: 실행 실패로 롤백되고 시작 이전의 상태로 환원된 상태
동시성 고려
- DBMS는 다수의 사용자가 데이터베이스를 공용으로 사용하기 위한 목적으로 도입
- 트랜잭션 동시 실행의 이점
- 트랜잭션 처리율과 자원 이용률을 향상
- 트랜잭션의 대기 시간을 감소
- 다중 사용자 환경에서 트랜잭션의 동시 실행으로 데이터 갱신 시, 일관성 훼손 문제가 발생
- 동시성 제어(concurrency control): 다수의 트랜잭션이 성공적으로 동시에 실행되어도 일관성을 유지할 수 있도록 지원하는 기법
스케줄(Schedule)
- 여러 트랜잭션들이 동시에 실행될 때, 각 트랜잭션에 속한 operation들의 실행 순서
- 각 트랜잭션들의 operations의 순서는 변화지 않는다.
- serial schedule (직렬)
- 트랜잭션들이 겹치지 않고 한 번에 하나씩 실행되는 스케줄
- 한 번에 하나의 트랜잭션만 실행되기 때문에 좋은 성능을 낼 수 없고 현실적으로 사용할 수 없는 방식
- non serial schedule (병렬)
- 트랜잭션들이 겹쳐서 실행
- 트랜잭션들이 겹쳐서 실행되기 때문에 동시성이 높아져서 같은 시간동안 더 많은 트랜잭션들을 처리할 수 있다.
직렬 가능 스케줄의 정의
- 트랜잭션 간 연산 순서를 교환하여 트랜잭션을 직렬 스케줄과 동등하게 변환이 가능한 스케줄
- 사용된 Read와 Write 연산 교환 시 상황에 따라 실행 결과에 일관성이 훼손되는 현상(충돌)이 발생
- 연산 순서의 교환
충돌 동등
- 특정 스케줄 S에서 충돌이 일어나지 않는 연산의 순서를 바꿔 스케줄 S`으로 변환이 가능한 상태
충돌 직렬성
- 순서 교환이 가능한 연산을 교환하여 직렬 스케줄의 연산과 동등하게 변환이 가능한 스케줄
트랜잭션의 회복
회복의 개념
- 원자성을 보장하기 위해 트랜잭션 실패 시 실행된 모든 연산을 실행 이전 상태로 복원하는 기법
- 회복 불가능한 스케줄
- 스케줄 내에서 커밋된 트랜잭션이 rollback 된 트랜잭션이 write 했었던 데이터를 읽은 경우
- rollback을 해도 이전 상태로 회복 불가능할 수 있기 때문에 DBMS에서 허용하면 안된다.
- 회복 가능한 스케줄
- 스케줄 내에서 어떤 트랜잭션도 자신이 읽은 데이터를 write 한 트랜잭션이 먼저 commit/rollback 되기전까지는 commit 하지 않은 경우
- 비연쇄적 스케줄
- cascading rollback: 하나의 트랜잭션이 롤백하면 의존성 있는 다른 트랜잭션도 롤백 되어야 한다.
- cascading schedule: 스케줄 내에서 어떤 트랜잭션도 commit 되지 않은 트랜잭션들이 write 을 하지 않은 경우
PREVIOUS해싱과 특수 인덱스
NEXT동시성 제어