본문으로 건너뛰기

병행제어

· 약 3분

병행제어 목적​

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

병행제어 실패 현상​

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

병행제어 기법​

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

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

낙관적 병행제어​

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

다중 버전 병행제어​

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

출처​