18.병행제어(Concurrency Control)기법의 종류가 아닌 것은?
해설
병행제어 기법의 종류 •로킹(Locking) ◦로킹은 주요 데이터에 대한 액세스를 상호 배타적으로 동작하게끔 만들어준다. ◦로크를 소유하고 있어야만 데이터에 접근할 수 있도록 하고, 로크를 소유하고 해제하는 규칙을 정해놓아 동시에 여러 트랜잭션이 하나의 데이터를 갱신하는 문제를 해결한다. •로킹 단위(Locking Granularity) ◦병행제어에서 한번에 로킹할 수 있는 단위 ◦데이터베이스, 파일, 레코드, 필드등이 주로 로킹의 단위로 사용된다. ◦로킹 단위가 작으면, 더 조그만 단위에서까지 병행성을 보장할 수 있으므로 병행성 수준이 높아지게 된다. 허나 데이터베이스 전체를 수많은 작은 단위로 나누어 관리하게 되면, 그만큼 로크의 수가 많아지게 되어 관리는 어려워 진다. ◦반대로 로킹 단위가 크면, 병행성 보장 수준이 낮아지겠지만, 더 큰단위로 묶어서 관리하다보니 로크의 수가 적어 관리는 쉬어진다. •로킹의 종류 ◦공유 로크(S, Shared Lock) ◦배타 로크(X, Exclusive Lock) ◦의도 로크(I, Intention Lock) ◦의도 공유3 로크(IS, Intention-Shared Lock) ◦배타 의도 로크(IX, Intention-Exclusive Lock) ◦공유 의도 독점 로크(SIX, Shared and Intention-Exclusive Lock) ◦공유 형태로 로킹을하면, 읽기 권한은 가지지만 쓰기 권한은 갖지 못한다. 동시에 여러 트랜잭션이 해당 로크를 획득하여 데이터를 읽어들일 수 있다. ◦독점 형태로(배타) 로킹을 하면, 읽기와 쓰기 권한을 모두 갖게된다. 또한 하나의 트랜잭션이 독점 로크를 획득한 상태라면 다른 트랜잭션은 해당 데이터에 대한 접근이 불가능하게된다. •2단계 로킹 규약(Two-Phase Locking Protocol) ◦각 트랜잭션의 로크 요청과 해제 요청을 2단계로 실시한다. 직렬성을 보장하는 대표적인 로킹 규약이지만, 교착상태에 대한 예방은 불가능하다. ◦요청 단계(Growing Phase) = 확장 단계 : 트랜잭션이 로크를 획득만 가능하며, unlock은 수행할 수 없는 상태 ◦반납 단계(Shrinking Phase) = 축소 단계 : 트랜잭션이 unlock만 수행 가능하며, 로크를 획득할 수는 없는 상태 •타임 스탬프 순서(Time Stamp Ordering) ◦직렬성 보장을 위해, DBMS가 트랜잭션의 처리 순서를 미리 선택하는 기법 ◦트랜잭션이 시스템에 들어오면, 들어온 순서대로 시간표(Time Stamp)를 부여하여, 부여된 순서에 따라 트랜잭션 작업을 수행하게된다. ◦타임 스탬프를 사용하면 로크를 사용하지 않으며, 따라서 교착상태가 발생하지 않는다. •최적 병행수행(검증 기법, 확인 기법, 낙관적 기법) ◦병행 수행하려는 트랜잭션의 대부분이 읽기 작업만을 수행하는 트랜잭션이라면, 특별히 병행제어 기법을 사용하지 않더라도 트랜잭션간의 충돌이 일어날 일이 극히 적다. ◦최적 병행수행이란 이러한 특성을 이용한 기법으로, 트랜잭션이 수행되고 있는 동안에는 어떠한 검사도 하지 않으며, 갱신작업이 발생한 이후로 아래의 3가지 단계를 수행하게 된다. ◾읽기 단계(Read Phase) : 트랜잭션이 데이터베이스로부터 데이터를 읽을 수는 있지만, 갱신 작업은 트랜잭션의 작업공간에 유지되는 데이터 항목들의 지역 사본(local copy)에 대해서만 적용된다. ◾검증 단계(Validation Phase) : 트랜잭션 수행의 마지막 단계에서, 갱신된 내용들이 데이터베이스에 반영되더라도 직렬성이 보장된다는 것을 확인하기 위한 검증 작업을 수행한다. ◾쓰기 단계(Write Phase) : 검증 단계가 성공하면 트랜잭션의 갱신된 데이터들이 데이터베이스에 반영되며, 검증 단계가 실패하였다면 갱신된 내용들을 폐기하고 트랜잭션을 재 시작한다. •다중 버전 기법(Multiversion concurrency control) ◦타임 스탬프의 개념을 이용하는 기법으로, 타임 스탬프 기법이 트랜잭션의 시간 순서를 관리했다면, 다중 버전 기법은 갱신될 때마다의 버전을 부여하여 관리한다. ◦특정 데이터가 갱신될 때에, 해당 항목의 이전 값을 보존하기 위해 한 데이터 항목에 대해 여러 버전의 값을 유지한다. ◦트랜잭션이 쓰기 작업을 수행할 시에, 새로운 버전에 쓰기 작업을 진행하고, 그 항목의 이전버전은 계속 보존하고 있는 식으로 동작한다. ◦다른 기법을 사용할시에는 실패하게될 일부 읽기 작업들이, 해당 항목의 이전 버전(Older Version)을 읽도록 함으로써 읽기 작업도 수행 가능하며 직렬성도 보장할 수 있다.