본문 바로가기

BASIC/DataBase

[DB] 병행제어(Concurrency Control)

1. 병행제어의 정의

- 병행제어(Concurrency Control)란 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것이다.


2. 병행제어의 목적

- 데이터베이스의 공유를 최대화한다.

- 시스템의 활용도를 최대화한다.

- 데이터베이스의 일관성을 유지한다.

- 사용자에 대한 응답시간을 최소화한다.


3. 병행수행의 문제점

- 병령제어 기법에 의한 제어 없이 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우 다음과 같은 문제점이 발생한다.

- 갱신 분실(Lost Update) : 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상

- 비완료 의존성(Uncommitted Dependency) : 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상. 임시 갱신이라고도 한다.

- 모순성(Inconsistency) : 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문제. 불일치 분석이라고도 한다.

- 연쇄 복귀(Cascading Rollback) : 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상


4. 병행제어 기법의 종류

1) 로킹(Locking)

- 로킹은 주요 데이터의 액세스를 상호 배타적으로 하는 것이다.

- 트랜잭션들이 어떤 로킹 단위를 액세스 하기 전에 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법이다.

- 로킹의 종류

- 공유 로크

- 배타 로크

- 의도 로크

- 의도 공유 로크

- 배타 의도 로크

- 공유 의도 독점 로크

- 2단계 로킹 규약

- 각 트랜잭션의 로크 요청과 해제 요청을 2단계로 실시한다.

- 직렬성을 보장하는 대표적인 로킹 규약이다.

- 새로운 Lock은 수행할 수 있지만 Unlock은 수행할 수 없는 확장 단계와 새로운 Unlock은 수행할 수 있지만 lock은 수행할 수 없는 축소 단계가 있다.

- 직렬성을 보장하는 장점은 있지만, 교착상태를 예방할 수 없다는 단점이 있다.


2) 타임 스탬프 순서(Time Stamp Ordering)

- 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법이다.

- 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 작업을 수행하는 기법이다.

- 교착상태가 발생하지 않는다.


3) 최적 병행 수행(검증 기법, 확인 기법, 낙관적 기법)

- 병행수행하고자 하는 대부분의 트랜잭션이 판독 전용(Read Only) 트랜잭션일 경우, 트랜잭션 간의 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법이다.


4) 다중 버전 기법

- 타임 스탬프의 개념을 이용하는 기법으로, 다중 버전 타임 스탬프 기법이라고도 한다.

- 타임 스탬프 기법은 트랜잭션 및 데이터들이 이용될 때의 시간을 시간표로 관리하지만, 다중 버전 기법은 갱신될 때마다의 버전을 부여하여 관리한다.

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

[DB] 보안(Security)  (0) 2018.02.22
[DB] 무결성(Integrity)  (0) 2018.02.22
[DB] 트랜잭션의 개념  (0) 2018.02.21
[DB] 시스템 카탈로그  (0) 2018.02.21
[DB] 뷰(View)  (0) 2018.02.21