ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Database] 트랜잭션은 무엇인가?
    ComputerScience/DB,Cloud 2020. 6. 13. 16:38

    트랜잭션

     

    트랙잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산을 의미한다.

     

    트랜잭션의 특징

    1. 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위.

    2. 사용자가 시스템에 대한 서비스 요구 시, 시스템이 응답하기 위한 상태 변환 과정의 작업단위.

    3. 하나의 트랜잭션은 Commit되거나 Rollback된다.

     

     

    트랜잭션의 성질 (ACID)

    Atomicity(원자성)

    1. 트랜잭션의 연산은 DB에 모두 반영 or 전혀 반영 안되어야 한다.

    2. 트랜잭션 내의 모든 명령은 반드시 완벽수행, 모두가 완벽 수행되지 않는다면 트랜잭션 전부가 취소

     

     

    Consistency(일관성)

    1. 트랜잭션이 그 실행을 성공적으로 완료한다면 언제나 일관성 있는 데이터베이스 상태로 변환한다.

    2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

     

     

    Isolation(독립성, 격리성)

    1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우, 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션이 끼어들 수 없다.

    2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

     

     

    Durablility(영속성, 지속성)

    1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도, 영구적으로 반영되어야 한다.

     

     

    트랜잭션의 연산 및 상태

    트랜잭션의 연산

     

    Commit 연산

    Commit 연산은 한개의 트랜잭션이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산.

    (나 일관된 상태로 트랜잭션 끝났어!)

     

     

    Rollback 연산

    1. Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨트렸을 때, 이 트랜잭션 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 모든 연산을 취소하는 연산.

    2. Rollback시에는 해당 트랜잭션은 재시작되거나 폐기.

     

    트랜잭션의 상태

      

    활동(Active) : 트랜잭션이 실행중인 상태

    실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

    철회(Aborted) : 트랜잭션이 비정상으로 종료되어 Rollback 연산을 수행한 상태

    부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행됐지만, Commit 연산이 실행되기 직전의 상태

    완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

     

     

    트랜잭션의 병행 처리 중 발생하는 문제

    갱신 내용 손실 : 동시에 하나의 데이터가 생신될 때 하나의 갱신이 누락

     

    현행 파악 오류 : 하나의 데이터 갱신이 끝나지 않은 시점에서 다른 트랜잭션이 끼어들어 데이터를 조회하는 경우

     

    모순성 : 두 트랜잭션이 동시에 실행될 때, 데이터베이스가 일관성이 없는 모순상태로 남는 경우

     

    연쇄 복귀 : 두 트랜잭션이 하나의 레코드를 갱신할 때, 하나의 트랜잭션이 롤백하면 다른 하나의 트랜잭션 마저 롤백이 되는 경우

     

    이를 해결하기 위해서는 로킹 제어 기법을 이용한다.

     

    로킹 기법 : 트랜잭션들이 동일한 데이터 항목들에 대해 임의적인 병행 접근을 하지 못하도록 제어하는 것

     

    예) 트랜잭션 A와 B가 있다. 데이터 X가 있다.

    -A가 연산을 수행하려면 반드시 LOCK(X)를 걸어주어야 함.

    -A가 연산 후 트랜잭션이 종료되기 전에 반드시 UNLOCK(X)을 해주어야 함.

    -트랜잭션 B는 이미 rock이 걸려있는 X에 대해 다시 LOCK을 수행시키기 못함.

    -LOCK을 수행시키기 않고, UNLOCK을 수행시키기 못한다.

     

     

    로킹 제어가 일으킬 수 있는 문제

    트랜잭션의 직렬화, 데드락 

     

    데드락 해결 방법 :

    2020/06/13 - [운영체제] - [운영체제] 데드락(Dead lock), 교착상태가 뭐지? + 해결방법

     

    댓글

Designed by Tistory.