병행제어

데이터베이스 2014. 10. 24. 00:37

트랜잭션 : 하나의 논리적 기능을 수행하기 위한 작업 단위

1. 원자성 : 연산 결과를 반영할때 모두 반영하거나, 모두 반영하지 않아야 함

2. 일관성 : 실행후에도 일관성유지(데이터가 모순되면안됨)

3. 격리성 : 트랜잭션이 수행중에 다른 트랜잭션이 접근할수 없음

4. 영속성 : 연산이 성공적으로 수행되면 결과값을 반영해야함

commit(완료) : 트랜잭션이 성공적으로 실행됬음을 의미

Rollback(복원) : 트랜잭션이 실패하였음을 의미, 데이터 베이스를 복원해야 한다, 그렇지 않으면 데이터베이스가 모순됨

소멸성 저장장치 : 메인 메모리와 같이 시스템이 붕괴되면 정보도 손실
비소멸성 저장장치 : 디스크나, 테이프와 같이 시스템이 붕괴되도 정보가 유지
안전성 저장장치 : 정보 손실이 발생하지 않게 여러개의 비소멸성 저장장치로 구성(동일 데이터를 여러 군대 저장)


회복 : 데이터베이스를 장애 발생 전의 일관된 상태로 복원하는것

일관된 상태 : 오류가 없는 상태를 말함(데이터베이스 모순이 없는 상태)

장애 : 정해진 명세대로 시스템이 작동하지 않는것

1. 트랜잭션 장애 - 트랜잭션 내의 논리적 오류나 내부문제(데이터베이스 불량, 불명..)
2. 시스템 장애 - 교착현상, 하드웨어 오동작, 메인메모리 정보 손실
3. 미디어 장애 - 디스크 헤더 붕괴나 고장으로 인해 데이터베이스 일부 혹은 전부가 손상

데이타 중복
덤프 - 주기적으로 다른 저장장치에 복제
로그 - 일지라고도 하며 데이타베이스가 변경될때마다 데이타 옛값과 새로운 값을 별도 화일에 저장

Redo : 가장 최근 복제본으로 복원시킨뒤 로그를 재실행 함으로써 데이터를 복원
Undo : 로그를 이용하여 모든 변경을 취소하여 원래의 데이터베이스로 복원

<T1, start> : T1 트랜잭션 실행 시작
<T1, X1, v1, v2> : 트랜잭션 T1이 데이타아이템 X1값을 v1에서 v2로 변경함
<T1, Commit> : T1트랜잭션 실행 완료


즉시 갱신
-트랜잭션이 연산을 실행하고 있는 상태에서 데이터변경결과를 그대로 반영(연산시 바로바로 반영)
-시스템 붕괴나 트랜잭션 장애가 일어나면 트랜잭션이 실행되기 이전 상태의 데이터 값으로 복원시키는 Undo작업 수행할때
 레코드의 옛값이 사용됨 
 <트랜잭션id, 데이타아이템, 변경 전 값, 변경 된값>

지연 갱신
-트랜잭션이 부분 완료 될때까지 데이터베이스 변경을 로그에 기록해 두었다가 한꺼번에 실행
-Undo연산이 필요가 없음(즉시갱신과차이)

<트랜잭션id, 데이타아이템, 변경 된값>

 

미디어 회복 

- 데이터 베이스 내용 전체를 주기적으로 또다른 안전한 저장장치에 덤프 시키는 것

- 디스크가 붕괴되어도 최근 덤프를 이용해 이전 상태로 복귀


검사 지점(checkpoint) : 실행하고 있는 일을 모두 멈추고 디스크에 모두 반영시켜 놓음(실시간 백업과 비슷)

병행수행 : 몇개의 트랜잭션들을 동시에 수행시키는 것, 시작과 종료가 서로 중복되는 것을 말함

1. 갱신분실 : 같은 레코드에 동시 접근
2. 모순성 : 덧셈과 곱셈 순서에 따라 결과가 달라짐
3. 연쇄 복귀 : T1에서 오류가 나 복구 하려할때, T2에서 T1를 가져다 썻으므로 T1도 복귀해야함


일반적으로 n개의 트랜잭션의 직렬 스케줄 방법은 n!개

직렬 스케줄 : 스케줄에 포함된 트랜잭션의 연산들을 각 소속 트랜잭션 별로 모두 연속적으로 실행하는 스케줄
비직렬 스케줄 : 트랜잭션을 병행 실행시키는 스케줄

만일 n개의 트랜잭션에 대한 비직렬 스케줄 S가 똑같은 n개의 트랜잭션에 대해 직렬 스케줄 S'과 항상 동일한 결과를 생성하면

이 스케줄 S를 직렬 가능 스케줄이라고 한다.

로킹(Locking)방법

- 아이템에 접근할때 Lock연산실행, 이미 Lock이 걸렸다면 기다림

- 사용이 끝나면 unLock실행
- 트랜잭션이 어느 한 데이타 아이템의 마지막 접근이 끝나자 마자 unlock을 하는 것은 바람직하지 않다.

   왜냐하면 병행수행에 의한 무결성(직렬 가능성)이 보장되지 않기 때문에 

   -> 다음 처리할 데이타아이템을 다른곳에서 Lock했을 경우

2단계 로킹
- 사용할때 lock하고 사용이 끝나면 unlock함
- 2단계 로킹 은 직렬 가능성을 보장하는 반변에 교착상태[더이상 어느것도 실행하지 못하는 상태(서로기다림, 사이클 형성)]
  문제를 내포하고 있음.

- 스케줄 내의 모든 트랜잭션 들이 2단계 로킹 규약을 준수한다면, 그 스케줄은 직렬 가능

- 교착상태 예방 lock를 요청하는 과정에 어떤 제약을 가함, 트랜잭션을 실행시키기 전에 필요한 lock를 한꺼번에 모두 요청
  부여받지 못하면 실행시키지 않음

- 교착상태 탐지 교착상태가 탐지되면 한 트랜잭션을 취소시켜 다시 스케줄을 짜는 방법

'데이터베이스' 카테고리의 다른 글

데이터베이스 접근  (0) 2014.10.24
무결성과 보안  (0) 2014.10.24
데이터베이스 정규화  (0) 2014.10.24
데이터베이스론 이석호 솔루션  (0) 2014.10.24
데이터베이스 시스템 구성  (0) 2014.10.24