반응형

 

 

 

 

 

 

 

 

 

 

1. 동시성 제어

: 다중 사용자 DBMS에서 필요하다.

: 동시에 실행되는 트랜잭션들 간에 간섭이 발생하여 일관성이 깨지지 않도록 트랜잭션 실행 순서를 제어하는 기법이다.

 

 

 

2. 트랜잭션에서의 연산

1) read(x)

: 이름이 x인 데이터베이스 항목을 트랜잭션의 지역변수 x로 읽어들인다.

x는 테이블, 레코드, 필드 등

 

2) write(x)

: 지역변수 x에 저장된 값을 데이터베이스 항목 x에 저장한다.

** write 연산 수행 시 그 결과가 디스크에 저장될 수도 있고 그렇지 않을 수도 있다.

 

대부분의 dbms는 성능 향상을 위해 메모리 buffer를 사용한다.

 

 

 

 

 

 

3. 동시성 제어가 필요한 이유

: 트랜잭션들에 정의된 명령들 간 끼어들기가 가능하다.(interleaving)

 

- 스케줄

: 끼어들기 방식에 의해 실행되는 순서

: 스케줄은 전적으로 운영체제의 권한이다.

: 사용자는 어떠한 스케줄로 트랜잭션들이 실행되는지 미리 예측하기 어렵다.

 

- 끼어들기 방식의 문제점

: 서로간의 간섭에 의해서 잘못된 데이터를 생성할 수 있다.

: 갱신 분실, 연쇄 복귀, 불일치 분석 현상이 발생가능하다.

 

 

 

 

4. 갱신 분실

T1이 read를 수행하고 write 하기 전에 T2가 read를 다시 수행하면 x값이 overwrite 되어서 사라진다.

 

 

 

 

5. 연쇄 복귀

: T3가 복귀(rollback)하면 T4에서 한 수행도 복귀되어야 한다.

but T4가 이미 완료된 이후라면 복귀 불가능하다.(지속성 위배)

완료되지 않은 트랜잭션의 쓰기 연산에 의해 갱신된 데이터를 다른 트랜잭션이 읽었기 때문에 (dirty read)

 

 

 

 

 

 

 

 

 

6. 불일치 분석

 

 

 

 

 

7. 끼어들기로 인한 문제점 해결방안

 

1) 트랜잭션들을 하나씩 순차적으로 실행한다.

2) 직렬 스케줄 생성 -> 시스템 성능 저하 발생

3) 직렬 가능한 스케줄 생성 -> 끼어들기를 최대한 허용하면서 직렬 스케줄과 동일한 결과를 갖도록 실행 순서를 제어한다.

 

 

 

6. 직렬 스케줄

: 각 트랜잭션의 연산들이 끼어들기 방식으로 실행되지 않고, 순차적으로 실행되는 스케줄이다.

 

 

 

 

 

7. 직렬 가능한 스케줄

: 직렬 스케줄과 실행 결과가 동일한 스케줄이다.

 

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

: 스케줄에 나타난 연산들의 순서를 바꿔 직렬 스케줄을 만들 수 있으면 직렬 가능한 스케줄이다.

 

 

ex) C1와 C2의 실행 순서를 바꿔 직렬 스케줄로 만들 수 있들 수 있으면 직렬 가능 스케줄

 

 

- C1, C2의 실행 순서를 바꿀  수 있는 경우

 

: C1과 C2가 서로 다른 데이터 항목에 대한 연산일 경우 -> 교환 가능하다.

: C1과 C2가 같은 데이터 항목이지만,

C1과 C2가 모두 read 연산일 경우, -> 교환 가능하다.

C1과 C2 중 하나라도 write 연산일 경우, -> 교환 불가능하다.

 

 

 

 

 

 

1) 직렬 스케줄로 변환 가능한 경우

 

 

 

 

2) 직렬 스케줄로 변환 불가능한 경우

 

: 직렬 스케줄로 바꾸기 위해서는 (1)과 (4)의 순서를 바꾸거나 (2)와 (3)의 순서를 바꿔야 하는데,

같은 데이터이고 write 가 들어가기 때문에 바꿀 수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts