[TOPCIT 목차]

 

키워드 : 갱신손실, 현황파악오류, 모순성, 연쇄복귀, Locking, 2PL, Timestamp

 

01. 트랜젝션이란

  가) 트랜잭션의 개념

  • 하나의 논리적인 작업 단위를 이루는 여러 연산 집합으로 데이터베이스의 일관된 상태를 또 다른 일관된 상태로 변환시킴
  • 한 번에 수행되어야 할 데이터베이스의 일련의 읽기(Read)와 쓰기(Write) 연산을 수행하는 단위

  나) 트랜잭션의 ACID 특징

특징 ACID가 깨지는 사례
Atomicity
(원자성)
철수는 10건의 데이터를 입력 처리하는 작업을 1개의 트랜잭션으로 처리하는데 9건을 성공적으로 수행되었고 한 건은 실패되어 저장
-> 1개의 트랜잭션에서 모든 데이터는 함께 성공하든지 함께 실패하든지 해야 함
Consistency
(일관성)
강희는 SQL의 연산을 칼럼1+칼럼2+칼럼3-칼럼4의 로직으로 실행하는데 실행 때마다 예측된 결과가 나오지 않고 다른 결과가 나오는 경우가 있음
-> 트랜잭션의 실행은 항상 기대되는 값을 정확하게 보여줘야 함, 중간에 다른 트랜잭션이 끼어들지 못 하게 하는 Lock, Timestamp, Validation 등을 사용하여 제어함
Isolation
(고립성)
영희가 100건의 데이터를 수정하는 작업을 실행하여 데이터베이스에서는 35건째 수정작업이 진행 중인데 첫 번째 수정한 데이터를 철수가 접근하여 재수정하였다.
-> 트랜잭션의 Commit 또는 Rollback이 발행되기 전에 다른 트랜잭션이 끼어들어서 처리하면 안 됨
Durability
(영속성)
철수가 10건의 회원 정보를 회원 테이블에 저장(Insert)하고 성공적으로 Commit 하였으나 전원이 일시적으로 나갔다가 들어오면서 데이터가 유실됨
->한번 성공한 트랜잭션은 지속성을 보장해야 함, 이 같은 경우 순방향 복구 알고리즘에 의해 복구되어야 함
  다) 트랜잭션 종료 시 연산
  • 트랜잭션 완료(Commint) 연산 : 트랜잭션 안에서 수행한 모든 SQL 문장들의 결과를 데이터베이스에 영구적으로 반영하면서 해당 트랜잭션을 종료하는 연산
  • 트랜잭션 복귀(Rollback) 연산 : 트랜잭션의 수행 도중에 치명적인 오류가 있어 더 이상 진행할 수 없거나, 사용자에 의해 반영 취소 명령(rollback)이 수행되었을 때 지금까지 수행해왔던 트랜잭션 안에서 변경된 모든 데이터 값을 트랜잭션 수행 이전 상태로 되돌리는 연산{즉, 트랜잭션을 철회(abort)하는 연산}

  라) 트랜잭션 처리 시 고려사항

  • 트랜잭션의 동시성 구현 : 트랜잭션의 동시 실행은 트랜잭션의 처리율과 시스템 이용률을 높이고 대기시간을 줄임으로써 동시성을 높일 수 있음
  • 트랜잭션 수행시간을 최대한 짧게 수행 : 긴 트랜잭션의 경우에 잠금(Lock) 수행시간이 길어져 충돌 현상 및 교착상태를 발생시킬 소지가 큼. 트랜잭션은 직렬성을 보장할 수 있도록 잠금(Lock)을 충분히 오랫동안 유지해야 하지만 동시에 성능을 저하하지 않도록 짧게 구성할 필요가 있음.

02. 동시성(병행)제어

  가) 트랜잭션의 직렬가능 스케줄의 정의

  • 직렬성을 가진 트랜잭션 스케줄이란 각각의 트랜잭션이 동시에 수행되더라도 그 결과가 순차적으로 트랜잭션이 수행된 결과와 같은 경우
  • 트랜잭션의 직렬화 수행 보장
 

  나) 동시성(병행) 제어의 정의

  • 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
  • 다중 사용자 환경을 지원하는 데이터베이스 시스템의 경우 필수적으로 지원해야 하는 기능으로 동시성(병행) 제어라고도 함

  다) 동시성(병행) 제어의 목적

  • 직렬가능스케줄(Serializable Schedule)의 생성 또는 트랜잭션들의 직렬가능성 보장
  • 공유도 최대, 응답시간 최소, 시스템 활동의 최대 보장
  • 데이터의 무결성 및 일관성 보장

  라) 동시성(병행) 제어를 하지 않았을 경우 발생하는 문제점

구분 내용
갱신 손실
(Lost Update)
- 트랜잭션들이 동일 데이터를 동시에 갱신할 경우 발생
- 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신 값을 덮어쓰는 경우 발생
오손 데이터 읽기
(Dirty Read)
- 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
- 현황파악오류
모순성
(Inconsistency)
- 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제
연쇄 복귀
(Cascading Rollback)
-복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능
반복할 수 없는 읽기
(Unrepeatable Read)
- 한 트랜잭션 내에서 같은 질의를 두 번 수행했는데, 그사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 경우 두 질의의 결과가 다르게 나타나는 현상

  마) 동시성(병행) 제어 기법들

  • 잠금(Lock) 기반 기법
  • 타임 스탬프 기반 기법
  • 다중버전 기법
  • 검증(낙관적) 기반 기법

  바) 2PL(2-Phase Locking) 기법이란

  • 직렬성 보장을 통해 동시성을 제어하는 2단계 잠금(Locking) 기법으로 Lock과 Unlock 연산을 확장단계와 수축단계로 구분하여 수행하는 2 PL 규약을 따른다.

        - 확장단계 : 트랜잭션은 Lock만 수행할 수 있고 Unlock은 수행할 수 없는 단계

        - 수축단계 : 트랜잭션은 Unlock만 수행할 수 있고 Lock은 수행할 수 없는 단계

  • 모든 잠금 연산(Read_Lock, Write_Lock)들이 최초의 unlock 연산보다 앞에 나오는 경우, 그 트랜잭션은 2단계 잠금 프로토콜을 준수한다.
  • 만일 모든 트랜잭션이 2단계 잠금 규약을 준수한다면, 모든 트랜잭션은 직렬성을 보장받게 되나 그 역은 성립하지 않는다.
  • 직렬가능성을 보장할 수 있는 규약으로 가장 많이 사용된다.

03. 트랜잭션 수준(Isolation Level)

  가) 완료되지 않은 읽기(Read Ucommitted)

  • 트랜잭션에서 처리 중인 아직 완료되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.

  나) 완료된 읽기(Read Committed)

  • 트랜잭션이 완료되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용한다.

  다) 반복 읽기(Repeatable Read)

  • 트랜잭션 내에서 질의를 두 번 이상 수행할 때, 첫 번째 질의에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해준다.

  라) 직렬화(Serializable Read)

  • 트랜잭션 내에서 질의를 두 번 이상 수행할 때, 첫 번째 질의에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드가 나타나지도 않게 한다.
Isolation Level Dirt Read Non repeatable Read Phantom Read
레벨 0 Read Uncommitted 발생 발생 발생
레벨 1 Read Committed X 발생 발생
레벨 2 Repeatable Read X X 발생
레벨 3 Serializable X X X

04. 교착상태(Daedlock)

  가) 교착상태 정의

  • 다중처리 환경 또는 다중 트랜잭션 데이터베이스 시스템에서 다수의 프로세스 또는 트랜잭션이 특정 자원의 할당을 무한정 기다리고 있는 상태
  • 교착상태에 있는 트랜잭션들은 결코 실행을 끝넬 수 없으며 시스템 자원이 묶여있어서 다른 작업을 시작하는 것도 불가능하므로, 교착상태가 발생하면 반드시 시스템은 두 트랜잭션 중의 하나를 취소시켜야 한다.
  • 모든 트랜잭션이 실행을 전혀 진전시키지 못하고 무한정 기다리고 있는 상태

        - T1T2가 데이터 XUnlock 하기를 기다림

        - T2는 데이터 XLocking하고 있는 상태

        - T2T이 데이터 YUnlock 하기를 기다림

        - T1은 데이터 YLocking하고 있는 상태

구분 Deadlock(교착상태) Stravation(무한대기)
정의 다수의 프로세스가 아무 일도 못 하고 특정사건 무한대기 특정 프로세스가 자원을 할당받기 위한 무한정 대기 상태
발생원인 상호배제, 점유와 대기, 비선점, 환형 대기 자원의 편중된 분배정책
해결방안 예방, 회피, 발견, 회복 Aging 기법
 
  나) 교착상태 발생원인
 
원인 내용
상호배제(Mutual Exclusion) 프로세스들이 자원을 배타적으로 점유하여 다른 프로세스가 그 자원을 사용하지 못함
점유와 대기(Block & Wait) 프로세스가 어떤 자원을 할당받아 점유하고 있으면서 다른 자원을 요구
비선점(Non Preemption) 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없으며, 점유하고 있는 프로세스 자신만이 해제 가능
환형 대기(Circular wait) 프로세스 간 자원 요구가 하나의 원형으로 구성
  다) 교착상태의 해결방안
해결방안 내용
교착상태 예방
(Deadlock Prevention)
- 시스템이 교착상태에 빠지지 않도록 보장하는 규약 사용
- 시스템이 교착상태에 빠질 확률이 상대적으로 높을 때 사용
- 상호배제 예방, 부분할당 예방, 비선점 예방, 환형 대기 예방
- 회피기법 : 타임 스탬프를 사용하는 Wait-Die, Wound-Wait 기법
교착상태 탐지와 복구
(Deadlock detection & Recovery)
- 시스템이 교착상태에 빠질 수 있도록 하고 교착상태 탐지와 복구 기법을 이용하여 교착상태 해결
- Dection : 시스템의 상태 감시를 알고리즘을 통하여 교착상태 검사(Wait for Graph reduction, cycle dection, knot detection)
- Recovery : deadlock이 없어질 때까지 프로세스를 순차적으로 Kill 하여 제거함{희생자 선택(프로세스 최소 종료 비용을 계산), 롤백, 기아 상태}
 

 

관련 링크

 1. Topic >  동시성 제어(Concurrency Control)/병행 제어

 2. 합격답안 > [답안] 동시성 제어 필요성, 해결방법(1교시)

+ Recent posts