• 다중 사용자 DBMS에서 데이터 고립성을 지키기 위해 필요한 기법

트랜잭션에서의 연산

  • x: 테이블, 레코드, 필드 등 데이터베이스를 구성하는 임의의 구성 요소
  • read(x): 이름이 x인 데이터베이스 항목을 트랜잭션의 지역변수 x를 읽어 들인다. SQL select 연산
  • write(x): 지역변수 x에 저장된 값을 데이터베이스 항목 x에 저장한다. SQL update 연산

동시성 제어가 필요한 이유

운영체제의 프로세스에 자원 할당 과정에서 트랜잭션 명령들 간의 선점이 가능하다. 이때 선점방식은 서로간의 간섭에 의해서 잘못된 데이터를 생성할 수 있기 때문에 동시성 제어가 필요하다.

끼어들기로 인한 문제

  • 갱신 분실: 트랜잭션 A에 의해 수행된 갱신이 트랜잭션 B에 의해 사라진 것
    • Uncommitted Dependency (Dirty Read): 트랜잭션 A가 데이터 항목 X를 업데이트하고, 그 변경이 아직 커밋되지 않은 상태에서 트랜잭션 B가 같은 데이터 항목 X를 읽는 경우
    • Inconsistent Analysis (Non-repeatable Read): 트랜잭션 A가 데이터 항목 X를 읽은 후, 트랜잭션 B가 같은 데이터 항목 X를 업데이트하고 커밋하는 경우
  • 연쇄 복귀: 트랜잭션의 실패로 인해 다른 트랜잭션들이 롤백되어야 하는 상황
  • 불일치 분석: 선점으로 인해 트랜잭션의 일관성이 유지되지 못하는 상황

선점으로 인한 문제점 해결 방법

  • 트랜잭션들을 비선점형으로 순차적으로 실행(가장 단순한 방법)
    • 단점: OS 활용률이 낮아짐
  • 선점을 최대한 허용하면서 직렬 스케줄과 동일한 결과를 갖도록 실행 순서 제어
    • 직렬 가능한 스케줄: 선점을 최대한 허용하면서 한 결과가 순서대로 작업한 결과와 같은 스케줄

직렬 가능한 스케줄인지 판단하는 방법

스케줄에 나타난 연산들의 순서를 전체적인 실행 결과에 영향을 미치지 않도록 교환 이 때 주어진 스케줄이 직렬 스케줄로 변환되면 직렬 가능한 스케줄이다.

'CS > DataBase' 카테고리의 다른 글

장애와 복구  (0) 2023.05.31
직렬 가능한 스케줄이 되도록 하는 방법  (0) 2023.05.31
트랜잭션  (0) 2023.05.19
정규화  (0) 2023.05.19
개체 관계  (0) 2023.05.10

+ Recent posts