개발스토리

회복과 병행제어2 본문

Computer Science/데이터베이스

회복과 병행제어2

무루뭉 2021. 5. 25. 02:25

전 포스팅(회복과 병행제어1)에서 트랜잭션의 개념을 읽히고 오시면 도움이 됩니당~

 

트랜잭션의 개념을 이제 알았다면 아래 그림까지 확인하시면 더 도움이 될 겁니다!

● 위 트랜잭션 수행 과정

- 박지성 계좌와 김연아 계좌의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.

- 박지성 계좌에서 10,000원을 인출한 값을 저장한다.

- 김연아 계좌에서 10,000원을 입금한 값을 저장한다.

- 박지성 계좌와 김연아 계좌의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.

● 트랜잭션의 종료(COMMIT)을 알리는 방법

방법1) 1-2-3-4-COMMIT-5-6

방법2) 1-2-3-4-5-6-COMMIT

DBMS는 사용자에게 빠른 응답성을 보장하기 위해 방법1을 채택한다.

방법2의 트랜잭션 수행과정은 아래처럼 나타난다.

 

MySQL 트랜잭션 제어 명령어(TCL)

 

 

장애(Failure)

- 시스템이 제대로 동작하지 않는 상태를 말한다.

트랜잭션 장애 의미 트랜잭션 수행 중 오류가 발생하여 정상적으로 수행을 계속할 수 없는 상태
원인 트랜잭션의 논리적 오류, 잘못된 데이터 입력, 시스템 자원의 과다 사용 요구, 처리 대상 데이터의 부재 등
시스템 장애 의미 하드웨어의 결함으로 정상적으로 수행을 계속할 수 없는 상태
원인 하드웨어 이상으로 메인 메모리에 저장된 정보가 손실되거나 교착 상태가 발생한 경우 등
미디어 장애 의미 디스크 장치의 결함으로 디스크에 저장된 데이터베이스의 일부 혹은 전체가 손상된 상태
원인 디스크 헤드의 손상이나 고장 등

 

데이터베이스를 저장하는 저장 장치의 종류

 

휘발성 저장 장치(소멸성) 의미 장애가 발생하면 저장된 데이터가 손실됨
메인 메모리 등
비휘발성 저장 장치(비소멸성) 의미 장애가 발생해도 저장된 데이터가 손실되지 않는다. 단, 디스크 헤더 손상 같은 저장 장치 자체에 이상이 발생하면 데이터가 손실될 수 있다.
디스크, 자기 테이프, CD 등
안정 저장 장치 의미 비휘발성 저장 장치를 이용해 데이터 복사본 여러 개를 만드는 방법으로, 어떤 장애가 발생해도 데이터가 손실되지 않고 데이터를 영구적으로 저장 할 수 있다.

 

위에 표들은 알아두면 좋다. 그럼 위에서 디스크와 메인 메모리 간 데이터 이동 연산을 알려줬는데 이 연산이 왜 필요할까!??!

 

- 일반적으로 데이터베이스는 비휘발성 저장 장치인 디스크에 상주한다.

- 트랜잭션이 데이터베이스의 데이터를 처리하기 위해서는 데이터를 디스크에서 메인 메모리로 가져와 처리한 다음 그 결과를 디스크로 보내는 작업이 필요하다.

 

트랜잭션의 수행을 위해 필요한 데이터 이동 연산

 

 

■ 디스크와 메인 메모리간의 데이터 이동 연산 : input / output

- 블록 단위로 수행된다. ( 디스크 블록: 디스크에 있는 블록, 버퍼 블록: 메인 메모리에 있는 블록 )

 

■ 메인 메모리와 프로그램 변수 간의 데이터 이동 연산 : read / write

- 응용 프로그램에서 트랜잭션의 수행을 지시하면 메인 메모리 버퍼 블록에 있는 데이터를 프로그램의 변수로 가져오고, 데이터 처리 결과를 저장한 변수 값을 메인 메모리 버퍼 블록으로 옮기는 작업이 필요하다.

 

그러면, 트랜잭션을 데이터 이동 연산을 포함한 프로그램으로 표현한 예시를 보자. 아마 이해가 갈 것이다!

 

회복(Recovery)

- 장애가 발생했을 때 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것

- 트랜잭션의 특성(ACID)을 보장하고, 데이터베이스를 일관된 상태로 유지하기 위해 필수적인 기능

ACID가 뭔지 모른다면 보고 오시죠! 2021.05.24 - [Computer Science/데이터베이스] - 회복과 병행 제어

- 회복 관리자가 담당 : 장애 발생을 탐지하고, 장애가 탐지되면 데이터베이스 복구 기능을 제공

 

■ 회복을 위해 데이터베이스 복사본을 만드는 방법

- 데이터베이스 회복의 핵심 원리는 데이터 중복이다.

로그 파일

- 데이터를 변경하기 이전의 값과 변경한 이후의 값을 기록한 파일

- 레코드 단위로 트랜잭션 수행과 함께 기록된다.

로그 레코드의 종류

 

- 그렇다면 계좌 이체 트랜잭션이 로그 파일에 어떻게 기록되는지 보자

 

■ 회복을 위한 기본 연산

 

회복 기법

 

 

■ 즉시 갱신(Immediate update) 회복 기법

 

 

- 트랜잭션 수행 중에 데이터 변경 연산의 결과를 데이터베이스의 즉시 반영

- 장애 발생에 대비하기 위해 데이터 변경에 대한 내용을 로그 파일에 기록

> 데이터 변경 연산이 실행되면, 로그 파일에 로그 레코드를 먼저 기록한 다음 데이터베이스에 변경 연산을 반영

- 장애 발생 시점에 따라 redo나 undo 연산을 실행해 데이터베이스를 복구

 

■ 지연 갱신(Deferred update) 회복 기법

 

 

- 트랜잭션 수행 중에 데이터 변경 연산의 결과를 로그에만 기록해두고, 트랜잭션이 부분 완료된 후에 로그에 기록된 내용을 이용해 데이터베이스에 한번에 반영

- 트랜잭션 수행 중에 장애가 발생할 경우 로그에 기록된 내용을 버리기만 하면 데이터베이스가 원래 상태를 그대로 유지하게 된다.

> undo 연산은 쓰지 않고 redo 연산만 사용한다.

> 로그 레코드에는 변경 이후 값만 기록하면 된다. <T1, X, new_value> 형식

 

■ 검사 시점 회복 기법

- 로그를 이용한 회복은 시스템 장애가 일어났을 때 어느 시점까지 되돌아가야 하는지 알 수 없다. 트랜잭션이 많은 응용의 경우 하루 이상 되돌아가서 복구하는 것은 사실상 불가능하다.

- 회복 시 많은 양의 로그를 검색하고 갱신하는 시간을 줄이기 위하여 몇 십 분 단위로 데이터베이스와 트랜잭션 로그 파일을 동기화한 후 동기화한 시점을 로그 파일에 기록해두는 방법 혹은 그 시점을 체크포인트라고 한다.

- 체크포인트 시점에는 다음과 같은 작업을 진행한다.

> 주기억장치의 로그 레코드를 모두 하드디스크의 로그 파일에 저장한다.

> 버퍼에 있는 변경된 내용을 하드디스크의 데이터베이스에 저장한다.

> 체크포인트를 로그 파일에 표시한다.

- 체크포인트가 있으면 로그를 이용한 회복 기법은 좀 더 간단해진다.

 

- 로그 전체를 대상으로 회복 기법을 적용할 때 발생할 수 있는 비효율성의 문제를 해결한다. 검사 시점으로 작업 범위가 정해지므로 불필요한 회복 작업이 없기 때문이다.

 

그렇다면, 이제 자신이 잘 이해했는지 확인해보자.

 

위 그림을 보고 즉시 갱신 방법, 지연 갱신 방법에 따른 연산이 무엇이 필요할까!?

 

고민...

 

고민...

 

고민.. 

 

● 즉시 갱신 방법

- T2, T3는 아무 작업이 필요하지 않고, T4, T5는 REDO를 한다. T1, T6은 UNDO를 하면 된다.

● 지연 갱신 방법

- T2, T3는 아무 작업이 필요하지 않고, T4, T5는 REDO를 한다. T1, T6은 커밋 전이기 때문에 아무 작업이 필요없다.

 

이해하셨나유!?

 

■ 미디어 회복 기법

- 디스크에 발생할 수 있는 장애에 대비한 회복 기법

- 덤프(복사본)이용 : 전체 데이터베이스의 내용을 일정 주기마다 다른 안전한 저장 장치에 복사

- 디스크 장애가 발생한다면? 

> 가장 최근에 복사해둔 덤프를 이용해 장애 발생 이전의 데이터베이스 상태로 복구하고 필요에 따라 REDO 연산을 수행한다.

 

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

회복과 병행제어4  (0) 2021.06.06
회복과 병행제어3  (0) 2021.05.25
회복과 병행 제어  (0) 2021.05.24
정규화  (0) 2021.05.22
데이터베이스 설계  (0) 2021.05.22
Comments