병행 제어와 데이터베이스 회복
데이터베이스 관리에서 중요한 두 가지 개념인 병행 제어와 데이터베이스 회복에 대해 알아보겠습니다. 병행 제어는 여러 트랜잭션이 동시에 실행되면서 데이터베이스의 일관성을 유지하도록 하는 기법이며, 데이터베이스 회복은 장애로 인해 손상된 데이터를 복구하는 작업입니다.
병행제어
- 개념
- 여러 트랜잭션들이 동시에 실행되면서도 데이터베이스의 일관성을 유지할 수 있게 하는 기법
- 목적
- 데이터베이스의 공유도 최대화
- 시스템 활용도 최대화
- 응답시간 최소화
- 단위 시간당 트랜잭션 처리건수 최대화
- DB 일관성 유지
병행제어의 문제점 (★)
- 갱신 분실(Lost Update)
- 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
- 비완료 의존성(Uncommitted Dependency)
- 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상
데이터 |
트랜잭션1 |
트랜잭션2 |
1000 |
READ(1000) |
|
1000 |
ADD(1000) |
|
2000 |
STORE(2000) |
READ(2000) |
1000 |
장애로 ROLLBACK |
|
- 모순성(Inconsistency)
- 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문제
- 연쇄 복귀(Cascading Rollback)
- 병행수행 된 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상
데이터 |
트랜잭션1 |
트랜잭션2 |
1000 |
READ(1000) |
|
1000 |
ADD(1000) |
|
2000 |
STORE(2000) |
|
2000 |
|
READ(2000) |
2000 |
|
ADD(2000) |
4000 |
|
STORE(4000) |
1000 |
장애로 ROLLBACK |
|
병행제어 기법 (★)
- 로킹(Locking)
- 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
- 로킹 단위 : 필드, 레코드, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
- 로킹 단위에 따른 구분
구분 |
로크 수 |
병행성 |
오버헤드 |
로킹 단위가 크면 |
적어짐 |
낮아짐 |
감소 |
로킹 단위가 작으면 |
많아짐 |
높아짐 |
증가 |
- 2단계 로킹 규약(Two-Phase Locking Protocol)
- Lock과 Unlock이 동시에 이루어지면 일관성이 보장되지 않으므로 Lock만 가능한 단계와 Unlock만 가능한 단계를 구분
- 확장단계 : 새로운 Lock은 가능하고 Unlock은 불가능하다.
- 축소단계 : Unlock은 가능하고 새로운 Lock은 불가능하다.
- 타임스탬프(Time Stamp)
- 데이터에 접근하는 시간을 미리 정해서 정해진 시간(Time Stamp)의 순서대로 데이터에 접근하여 수행
- 낙관적 병행제어(Optimistic Concurrency Control)
- 트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시에 일괄적으로 검사
- 다중 버전 병행제어(Multi-version, Concurrency Control)
- 여러 버전의 타임스탬프를 비교하여 스케줄상 직렬가능성이 보장되는 타임스탬프를 선택
데이터베이스 회복(Database Recovery)
- 개념
- 트랜잭션들을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구하는 작업
장애의 유형
유형 |
설명 |
트랜잭션 장애 |
트랜잭션의 실행 시 논리적인 오류로 발생할 수 있는 에러 상황 |
시스템 장애 |
H/W 시스템 자체에서 발생할 수 있는 에러 상황 |
미디어 장애 |
디스크 자체의 손상으로 발생할 수 있는 에러 상황 |
Undo와 Redo
Undo |
Redo |
트랜잭션 로그를 이용하여 오류와 관련된 모든 변경을 취소하여 복구 수행 |
트랜잭션 로그를 이용하여 오류가 발생한 트랜잭션을 재실행하여 복구수행 |
로그 파일
- 트랜잭션이 반영한 모든 데이터의 변경 사항을 데이터베이스에 기록하기 전에 미리 기록해두는 별도의 파일
회복 기법 (★)
- 로그 기반 회복 기법
- 지연갱신 회복 기법(Deferred Update)
- 트랜잭션의 부분 완료 상태에선 변경 내용을 로그 파일에만 저장
- 즉시갱신 회복 기법(Immediate Update)
- 트랜잭션 수행 도중에도 변경 내용을 즉시 데이터베이스에 기록
- 검사점 회복 기법(Checkpoint Recovery)
- 체크포인트 회복 기법
- 장애 발생 시 검사점(Checkpoint) 이전에 처리된 트랜잭션은 회복에서 제외하고 검사점 이후에 처리된 트랜잭션은 회복 작업 수행
- 그림자 페이징 회복 기법(Shadow Paging Recovery)
- 트랜잭션이 실행되는 메모리상의 Current Page Table과 하드디스크의 Shadow Page Table 이용
- 미디어 회복 기법(Media Recovery)
- 디스크와 같은 비휘발성 저장 장치가 손상되는 장애
- 발생을 대비한 회복 기법
- ARIES 회복 기법(Algorihms for Recovery and Isolation Exploiting Semantics)
- 주요 3단계
- 분석단계
- REDO 단계 (로그 재실행)
- UNDO 단계 (로그 취소)
병행 제어와 데이터베이스 회복은 데이터베이스 관리에서 중요한 부분입니다. 이 개념들을 잘 이해하고 적절히 활용하면 데이터베이스의 성능과 안정성을 크게 향상시킬 수 있습니다. 2024년에 정보처리기사를 따기 위해 노력하는 모두에게 행운을 빕니다!