본문으로 건너뛰기

병행제어

· 약 3분

병행제어 목적

  • 데이터베이스 일관성
  • 일관성을 유지하면서...
    • 데이터 베이스 공유 최대화!
    • 시스템 활용도 최대화!
    • 사용자 응답시간 최소화

병행제어 실패 현상

  • Dirty Wirte 갱신분실
    • 같은 데이터에 동시에 두개 이상의 트랜젝션이 값을 바꾸자고 함
  • Dirty Read 비완료 의존성
    • 아직 commit되지 않은 트랜잭션의 내용을 읽으려고 함
  • Non-repeatable Read 모순성
    • 동일 트랜젝션에서 동일한 대상을 여러번 읽을 때 그 사이에 수정 또는 삭제가 반영되어 값이 변경됨
  • Phantom Read
    • 동일 트랜젝션에서 동일한 대상을 여러번 읽을 때 그 사이에 새로운 값(Phantom Tuple) 이 삽입되어 갑싱 변경됨
  • Cascade Roolback 연쇄 복귀
    • 두개 이상의 Transaction이 수행되던 중 한개의 Transaction이 취소 될 떄 나머지 다른 Transaction도 연쇄적으로 취소되는 현상

병행제어 기법

Locking 로킹
  • 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
  • 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
  • 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
  • 로킹 단위: 필드, 레코드, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
  • 로킹 단위가 크면 : 관리하기 용이(로킹 오버헤드 감소)하지만 병행성 수준(동시성 수준) 낮아짐
  • 로킹 단위가 작으면 : 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가)
타임스탬프

데이터에 접근하는 시간을 미리 정하여서 정해진 시간(Time Stamp)의 순서대로 데이터에 접근 하여 수행

낙관적 병행제어

트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시에 일괄적으로 검사

다중 버전 병행제어

여러 버전의 타임스탬프를 비교하여 스케줄상 직렬가능성이 보장되는 타임스탬프를 선택

출처