본문 바로가기

Database/Theory

#03. 트랜잭션(Transaction) & 병행제어(Concurrency Control)

트랜잭션(Transaction)

한번에 모두 소행되어야하는 연산들의 집합, 하나의 작업을 처리하기위한 논리적 작업단위


성질(ACID)

Atomicity(원자성)연산들은 모두 수행되거나 모두 수행되지 않아야한다

Consistency(일관성)정상적 완료후, 일관성있는 DB상태, 결과에 모순이 생기지 않

 아야한다

Isolation(독립성,격리성)하나의 Transaction수행중, 다른 Transaction은 접근 할

     수없다

Durability(영속성,지속성)Transaction이 성공적으로 완류후, 결과는 지속적으로 유

지되어야한다


연산

하나의 Transaction은 Commit또는 Rollback되어야한다

CommitTransaction이 성공적으로 종료된후 수정된 내용을 지속적으로 유지

하기위한 연산

RollbackTransaction이 비정상적 수행 또는 오류발생시 수행작업취소후 이전

 상태로 되돌리기위한 연산


상태도

부분완료 >     실패또는 완료(Commit)

실행 >

실패 >     철회(Rollback)


실행: Transaction이 실행중

부분완료: DB에 결과저장 직전상태

실패: 요루에 의해 더이상 진행될수없는 상태

철회: 실행 실패되어 복귀되는 상태

완료: DB에 결과 저장한상태


스케쥴

동시에 여러개의 Transaction들이 병행 실행되는 경우 연산들이 실행되는 순서

직렬(Serial)스케쥴: 한Transaction을 구성하는 연산들을 연속적으로 모두 실행후 다

    른Transaction을 수행하는방식

비직렬(Non-Serial)스케쥴: 인터리브 실행기법을이용, 각 Transaction의 연산을 번

  갈아가며 수행

직렬가능(Serializable)스케쥴: 직렬, 비직렬 스케쥴기법결과가 동일한 경우


회복(Recovery)

손상된 DB를 손상되기 이전의 정상적인 상태로 복구시키는 작업

로그

Transaction이 수행되어 변경되는 DB의 상황정보를 기록

REDO: 로그의 내용을 토대로 재수행, 변경된 내용을 DB에 반영하는 과정

UNDO: 오류발생/비정상적 종료되는경우 Transaction이 시작된 지점으로 

     복귀

*Commint과 Rollback명령에 의새 수행되는 과정(REDO,UNDO)


회복기법

즉시갱신변경되는 내용을 즉시 DB에 적용, 변경된 모든내용 로그에 기록하여 장애 

   발생시 로그의 내용 토대로 회복

지연갱신Transaction이 부분완료가 되면 로그의 내용을 토대로 DB에 적용

검사시점Transaction실행중간에 검사시점을 지정하여 검사시점까지 수행후 완료    

   된 내용을 DB에 적용

그림자페이지(Shadow Paging)

로그를 사용하지않고 DB를 동일한 크기의 단위인 페이지로 나누어 각 페이지마다 복사하여 그림자 페이지를 보관, 변경되는 내용은 원본 페이지에 적용, 장애 발생시 그림자 페이지를 이용해 회복


DB수행시 발생하는 장애유형

Transaction 장애: 수행되는 과정에서 발생하는 오류

System 장애: Transaction 장애들로인해 System상에 문제발생

Media 장애: 하드웨어적 장애



병행제어(Concurrency Control)

병행실행시 Transaction들간의 격리성(Isolation)을 유지하여 Transaction수행에 문제가 발생하지않도록 제어


로킹(Locking)

하나의 Transaction이 사용하는 DB내의 data를 다른 Transaction이 

   접근하지 못하게 하나의 Transaction 실행될때는 Lock을 설정하여      

   다른 Transaction이 접근하지 못하도록 잠근후 실행, 실행 완료후 

   Unlock


교착상태(Deadlock)

Lock상태가 오래 유지되어 다른 Transaction들이 더이상 진행하지 

  못하고 무한정 대기상태를 뜻한다


로킹의 접근허용(교착상태 해결법)

공유락(Shared Lock): 사용중인 data를 다른 Transaction이 읽기허

용, 쓰기불허용으로 설정

베타락(Exclusive Lock)사용중인 data를 다른 Transaction이 

읽기, 쓰기 모두 불허용


로킹단위

Table, 속성, 튜플 단위로 Lock을 설정할수있다

단위가 크면 많은양의 data lock가능

단위가 크면 lock을 설정한 가짓수는 적어진다

단위가 크면 병행성 수준이 낮아진다


2단계로킹기법(Two-Phase Locking Protocol)

Lock설정대상 date가 여러개인 경우 모든 data에 lock을 설정하는 단계와 완료후 Lock을 해제하는 단계

확장단계(Growing Phase): Lock을 설정하는 단계

축소단계(Shirinking Phase): Lock을 해제하는 단계

교착상태(Deadlock)이 발생할수있다


타임스탬프(Time Stamp)

병행제어의 또다른 기법, 각 Transaction이 data에 접근할 시간을 미리지정, 그시간(Time Stamp)의 순서에 따라 순서대로 data에 접근하여 수행, 제한적인 시간이 존재하므로 교착상태가 발생하지 않는다.


병행제어를 하지 않았을 경우의 문제점

갱신분실(Lost Update)연산결과의 일부가 없어지는 현상

모순성(Inconsistency)얻어진 결과가 일관성없이 서로 다른 현상

연쇄복귀(Cascading Rollback)하나의 Transaction이 취소되므로인해 연

쇄적으로 다른  Transaction도취소되는 현상

비완료의존성(Uncommitted Dependedncy)하나의 Transaction수행이 실

패한후 회복되기 이전에 다른 Transaction이실패한 갱신결과를 참조하는 현상