트랜잭션: Difference between revisions

From IT Wiki
No edit summary
No edit summary
Line 65: Line 65:
* 비완료 의존성 (Uncommitied Dependency)
* 비완료 의존성 (Uncommitied Dependency)
** 두개 이상의 Transaction 수행시 먼저 수행된 Transaction이 실패한후 회복되기 이전에 다음 실행되는 Transaction이 실패한 값을 참조하게 되는 현상
** 두개 이상의 Transaction 수행시 먼저 수행된 Transaction이 실패한후 회복되기 이전에 다음 실행되는 Transaction이 실패한 값을 참조하게 되는 현상
= 복구(Recovery) =
;트랜잭션들을 수행하는 도중 장애로 인해 손상 된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
== 장애의 유형 ==
* 트랜잭션 장애: 트랜잭션의 실행 시 논리적인 오류로 발생할 수 있는 에러 상황
* 시스템 장애: H/W 시스템 자체에서 발생할 수 있는 에러 상황
* 미디어 장애: 디스크 자체의 손상으로 발생할 수 있는 에러 상황
== 로그 파일 ==
* 트랜잭션이 반영한 모든 데이터의 변경사항을 데이터베이스에 기록하기 전에 미리 기록해두는 별도의 데이터베이스
* 안전한 하드디스크에 저장되며 전원과 관계없이 기록이 존재
* 로그의 구조: <트랜잭션 번호, 로그의 타입, 데이터 항목 이름, 수정 전 값, 수정 후 값>
* 로그의 타입: START, INSERT, UPDATE, DELETE, ABORT, COMMIT 등 트랜잭션의 연산 타입
* '''로그파일을 이용한 복구'''
** 로그파일에 트랜잭션의 시작(START)와 종료(COMMIT)이 있는 경우 REDO 수행
** 로그파일에 트랜잭션의 시작(START)는 있고 종료(COMMIT)은 없는 경우 UNDO 수행
== 회복 기법 ==
* '''지연갱신 회복 기법'''
** 트랜잭션의 부분 완료 상태에선 변경 내용을 로그 파일에만 저장
** 커밋이 발생하기 전까진 데이터베이스에 기록하지 않음
** 중간에 장애가 생기더라도 데이터베이스에 기록되지 않았으므로 UNDO가 필요 없음
* '''즉시생신 회복 기법'''
** 트랜잭션 수행 도중에도 변경 내용을 즉시 데이터베이스에 기록
** 커밋 발생 이전의 갱신은 원자성이 보장되지 않는 미완료 갱신이므로 장애 발생 시 UNDO 필요
==

Revision as of 12:17, 9 May 2019

Transaction

정의

  • 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위
  • 한꺼번에 수행되어야 할 일련의 연산

특성

줄여서 ACID라고 한다.
  • 원자성(Atomicity)
    • 트랜잭션 연산은 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 함
    • 트랜잭션의 연산 중 어느 하나가 수행되지 않으면 트랜잭션 전부가 취소되어야 함
  • 일관성(Consistency)
    • 동일한 트랜잭션은 일관성있는 결과를 도출
    • 시스템의 고정적인 요소는 트랜잭션 전후가 동일
  • 독립성(Isolation)
    • 실행중인 트랜잭션에 다른 트랜잭션이 개입할수 없음
    • 실행중인 트랜잭션을 다른 트랜잭션에서 참조할 수 없음
  • 영속성(Durability)
    • 완료된 트랜잭션은 영속적이어야 함

트랜잭션 병행제어

병행제어의 목적

  • 데이터베이스 일관성 유지
  • 일관성을 유지하면서,
    • 데이터베이스 공유 최대화
    • 시스템 활용도 최대화
    • 사용자 응답시간 최소화

병행제어 기법

  • 로킹(Locking)
    • 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹 수행
    • 로킹이 되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없음
    • 트랜잭션은 로킹이 된 데이터에 대해서만 연산 수행
    • 로킹 단위: 필드, 레코드, 파일, 데이터베이스 모두 로킹 단위가 될 수 있음
    • 로킹 단위가 크면
      • 관리하기 용이(로킹 오버헤드 감소)하지만 병행성 수준(동시성 수준) 낮아짐
    • 로킹 단위가 작으면
      • 병행성(동시성 수준)이 높아지지만 관리가 까다로움(로킹 오버헤드 증가)
  • 2단계 로킹 규약(Two-Phase Locking Protocol)
    • Lock과 Unlock이 동시에 이루어지면 일관성이 보장되지 않으므로 Lock만 가능한 단계와 Unlock만 가능한 단계를 구분
    • 확장단계: 새로운 Lock은 가능하고 Unlock은 불가능하다.
    • 축소단계: Unlock 은 가능하고 새로운 Lock은 불가능하다.
    • 직렬가능성을 보장한다.
    • 교착상태가 발생할 수 있다
  • 타임스탬프(Time Stamp)
    • 데이터에 접근하는 시간을 미리 정하여서 정해진 시간(Time Stamp)의 순서대로 데이터에 접근 하여 수행
    • 직렬가능성을 보장한다.
    • 교착상태가 발생하지 않는다.
    • 연쇄복귀(Cascading Rollback)를 초래할 수 있음
  • 낙관적 검증
    • 트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시에 일괄적으로 검사
    • 트랜잭션 수행 동안 그 트랜잭션을 위해 유지되는 데이터 항목들의 지역 사본에 대해서만 갱신
    • 트랜잭션 종료 시에 동시성을 위한 트랜잭션 직렬화가 검증되면 일시에 DB로 반영

병행제어의 필요성

병행제어가 이루어지지 않을 경우 문제점
  • 갱신분실 (Lost update)
    • 두개 이상의 Transaction 수행하는 과정에서 연산결과의 일부가 없어지는 현상
  • 모순성 (Inconsistendy)
    • 두개 이상의 Transaction 수행해서 얻은 결과가 일관성이 없이 서로 다른 현상
  • 연쇄복귀 (Cascade Rolback)
    • 두개 이상의 Transaction이 수행되던중 한개의 Transaction이 취소될 때 나머지 다른 Transaction도 연쇄적으로 취소되는 현상
  • 비완료 의존성 (Uncommitied Dependency)
    • 두개 이상의 Transaction 수행시 먼저 수행된 Transaction이 실패한후 회복되기 이전에 다음 실행되는 Transaction이 실패한 값을 참조하게 되는 현상

복구(Recovery)

트랜잭션들을 수행하는 도중 장애로 인해 손상 된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업

장애의 유형

  • 트랜잭션 장애: 트랜잭션의 실행 시 논리적인 오류로 발생할 수 있는 에러 상황
  • 시스템 장애: H/W 시스템 자체에서 발생할 수 있는 에러 상황
  • 미디어 장애: 디스크 자체의 손상으로 발생할 수 있는 에러 상황

로그 파일

  • 트랜잭션이 반영한 모든 데이터의 변경사항을 데이터베이스에 기록하기 전에 미리 기록해두는 별도의 데이터베이스
  • 안전한 하드디스크에 저장되며 전원과 관계없이 기록이 존재
  • 로그의 구조: <트랜잭션 번호, 로그의 타입, 데이터 항목 이름, 수정 전 값, 수정 후 값>
  • 로그의 타입: START, INSERT, UPDATE, DELETE, ABORT, COMMIT 등 트랜잭션의 연산 타입
  • 로그파일을 이용한 복구
    • 로그파일에 트랜잭션의 시작(START)와 종료(COMMIT)이 있는 경우 REDO 수행
    • 로그파일에 트랜잭션의 시작(START)는 있고 종료(COMMIT)은 없는 경우 UNDO 수행

회복 기법

  • 지연갱신 회복 기법
    • 트랜잭션의 부분 완료 상태에선 변경 내용을 로그 파일에만 저장
    • 커밋이 발생하기 전까진 데이터베이스에 기록하지 않음
    • 중간에 장애가 생기더라도 데이터베이스에 기록되지 않았으므로 UNDO가 필요 없음
  • 즉시생신 회복 기법
    • 트랜잭션 수행 도중에도 변경 내용을 즉시 데이터베이스에 기록
    • 커밋 발생 이전의 갱신은 원자성이 보장되지 않는 미완료 갱신이므로 장애 발생 시 UNDO 필요

==