트랜잭션이란?
-논리적인 작업 단위를 구성하는 연산들의 집합
-실행 중 멈추거나 중단되지 않는 최소 작업 단위
-데이터베이스 응용 프로그램은 트랜잭션의 집합
트랜잭션 조건
원자성
트랜잭션은 중간에 멈출 수 없다.
일관성
트랜잭션 실행 전후 데이터베이스 내용이 일관되어야 한다.
고립성
트랜잭션이 실행하는 과정에서 갱신한 데이터는 트랜잭션이 완료될 때 까지 다른 트랜잭션이 참조할 수 없다.
지속성
트랜잭션이 성공적으로 완료되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장되어야 한다.
동시성 제어
-다중 사용자 DBMS에서 필요한 기법
-트랜잭션 간의 간섭이 발생하여 일관성이 깨지지 않도록 제어하는 기법
=> 트랜잭션 명령들 간의 끼어들기 방식은 서로간의 간섭에 의해 잘못된 데이터를 생성할 수 있기 때문에 동시성 제어가 필요하다.
끼어들기로 인한 문제점 해결
-트랜잭션을 순차적으로 실행 (자원을 효율적으로 쓸 수 없기 때문에 보통 잘 안함)
-끼어들기를 최대한 허용하며 직렬 스케줄과 동일한 결과를 갖도록 실행 순서를 제어(직렬 가능한 스케줄)
직렬 가능한 스케줄
-연산들의 순서를 실행 결과에 영향 미치지 않도록 교환하고 직렬 스케쥴로 변환 가능한 스케쥴
-서로 다른 데이터 항목에 대한 read, write 연산 일 경우
-같은 데이터 항목에 대한 read 연산일 경우
직렬 가능한 스케줄 되도록 하는 방법
-잠금 (대부분의 DBMS에서 사용)
-타임스탬프
잠금
-하나의 트랜잭션이 수행하는 동안 특정 데이터 항목에 대해 다른 트랜잭션이 동시에 접근하지 못하도록 방지
-공유 잠금(S-lock)
데이터 x에 S-lock을 건 트랜잭션은 read(x) 연산 가능, write(x)연산 불가
하나의 데이터 항목에 여러 개의 공유 잠금 가능
-배타 잠금(X-lock)
데이터 x에 X-lock을 건 트랜잭션은 read(x), write(x) 연산 모두 가능
하나의 데이터 항목에 대해서는 하나의 배타 잠금만 가능
두 개의 트랜잭션이 둘 다 s-lock을 걸었다면 동시에 잠금 가능하다.
어느 한 트랜잭션이 x-lock을 걸었다면 동시에 줄 수 없다.
잠금의 한계
-단순한 잠금 연산만으로 직렬 가능한 스케줄을 보장하지 않는다.
-교착상태 발생 가능
2단계 잠금 규약(2PL)
-확장단계(lock가능, unlock불가능)
-축소단계(unlock가능, lock 불가능)
트랜잭션은 확장단계로 시작해 축소단계로 끝난다.
2PL을 준수하면 항상 직렬 가능한 스케줄이 된다.
하지만 모든 직렬 가능한 스케줄이 2PL을 준수하는 것은 아니다.
반응형