티스토리 뷰

반응형

Trans + action

원자성(Atomicity)

완전하게 수행 완료되지 않으면 전혀 수행되지 않아야 한다.

연산은 Commit, Rollback을 이용해 적용 또는 취소로 한꺼번에 완료되어야 한다.

중간 하나의 오류가 발생되더라도 취소가 되어야 한다.

일관성 (Consistency)

시스템의 고정 요소는 트랜잭션 수행 전후에 같아야 한다.

트랜잭션 결과는 일관성을 유지해야한다.

격리성 (Isolation)

트랙잭션 실행시 다른 트랜잭션의 간섭을 받지 않도록 하는 것.

영속성 (Durability)

트랜잭션의 완료 결과가 데이터베이스에 영구히 기억된다.

트랜잭션의 연산

Commit 연산 : 트랜잭션 실행이 성공적으로 종료되었음을 선언한다.

Rollback 연산 : 트랜잭션 실행이 실패하였음을 선언한다.

병행 제어 (Concurrency Control)

동시에 수행되는 트랜잭션들을 일관성 있게 처리하기 위해 제어하는 것.

데이터베이스의 공유를 최대화 한다.

데이터베이스의 일관성을 최대화한다.

시스템 활용도를 최대화한다.

사용자에 대한 응답 시간을 최소화한다.

병행 제어 기법

로킹 (Locking) : 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션이 그 데이터 항목을 액세스 할 수 없도록 하는 병행제어 기법이다.

로킹의 특징

- 로킹 단위가 커지면 로크의 수가 적어 관리가 쉬워지지만, 병행성 수준이 낮아진다.

- 로킹 단위가 작으면 로크의 수가 많아 관리가 어려워지지만, 병행성 수준이 높아진다.

2단계 로킹 (2-Phase Locking)

직렬성은 보장하지만 교착상태 예방은 불가능하다.

확장 단계와 축소 단계의 두 단계(Phase)가 있다.

각 트랜잭션의 로크 요청과 해제 요청을 2단계로 실시한다.

타임스탬프

트랜잭션이 DBMS로부터 유일한 타임스탬프를 부여 받는다

타임스탬프가 적을수록 트랜잭션의 우선순위를 높게 하여, 타임스탬프가 적은 트랜잭션이 철회되는 방식이다.

격리 수준 (Isolation Level)

가장 낮은 격리 수준인 레벨 0인 경우 Lock이 걸리지 않기 때문에 속도는 빠르나 동시 접근을 허용하기 때문에 데이터 정합성에 문제가 생길 수 있다, 반대로 레벨 3의 경우 완전한 Lock이 걸리기 때문에 동시 접근을 차단하여 순차적으로 처리(Serializable)하기 때문에 정합성은 완벽하시만 동시에 처리할 수 있는 양이 적어 속도가 매우 느리다.

Isolation Level
Dirty Read
Nonrepeatable Read
Phantom Read
레벨0 Read Uncommited
발생
발생
발생
레벨1 Read Committed
X
발생
발생
레벨2 Repeatable Read
X
X
발생
레벨3 Serializable
X
X
X

동시성 이슈란 하나 이상의 트랜잭션이 동시에 동일한 데이터에 접근하여 읽기/쓰기 오퍼레이션을 할 때 발생할 수 있음으로 이 상황을 기억하고 어떤 문제가 발생할 수 있는지 아래를 살펴보자.

Dirty Read

- 완료되지 않은 트랜잭션이 갱신한 내용을 읽는 것

read - read는 문제가 안생긴다.

read - write

wrtie - read

write - write 일 때 문제가 발생 됨

T1 = 트랜잭션 1

T2 = 트랜잭션 2

T1이 A테이블을 UPDATE할 때 T2에서 A테이블 내용을 SELECT하는 상황을 가정

T1
T2
UPDATE user
SET name = '아무개'
WHERE id = 13
 
 
SELECT name
FROM user
WHERE id = 13
Rollback;
 
 
Commit;

Non-Repeatable Read

T1
T2
 
SELECT name
FROM user
WHERE id = 13
UPDATE user
SET name = '홍길동'
WHERE id = 13;
COMMIT;
 
 
SELECT name
FROM user
WHERE id = 13;
COMMIT;

T2가 User id = 13에 대해 질의를 하고 트랜잭션이 완료되지 않고 나왔던 결과값이 T1에서 name이 변경되고 트랜잭션이 완료가 되면 T2가 다시 SELECT를 하게되면 이전 값을 얻을 수 없거나 또는 변경된 값을 얻게 된다.

Phantom Read

트랜잭션1이 A테이블에서 SELECT한 이후 트랜잭션2에서 A테이블에 내용을 추가/삭제 하는 상황.

트랜잭션 T1에 속한 첫번째 SELECT문과 두 번째 SELECT문의 수행 결과가 다르게 나타남. 이러한 현상을 팬텀 문제라고 함.

도표 입력 예정.

반응형