Computer Science/Database :: 데이터베이스

데이터베이스 12강 :: 트랜잭션, 동시성, 스케줄

HJPlumtree 2022. 4. 27. 10:57

데이터베이스 12강을 보며 배운내용

 

 

트랜잭션이 뭐지?

데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 연산의 집합

데이터베이스를 사용하는 작업을 묶어놓은 것을 트랙잭션이라고 부른다

그럼 코드 작성할 때의 함수 같은거구나~

=> 여러 사용자가 데이터에 동시 접근시, 데이터의 일관성 문제를 해결해준다

 

특징

항상 ACID 특징을 준수해야 한다

  • 원자성(Atomicity)
    트랜잭션에 포함된 모든 연산 전체가 수행되거나 or 하나도 안되거나
    모 아니면 도
  • 일관성(Consistency)
    트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태 유지
  • 고립성(Isolation)
    하나의 트랜잭션은 다른 트랜잭션에 방해받지 않는다
  • 지속성(Durability)
    DBMS에 문제가 생겨도 데이터베이스에 저장된 트랜잭션의 결과가 지속되어야 한다

 

기본 연산 2가지

  • READ(X): 데이터베이스의 데이터 X => 메모리 변수 X에 저장
  • WRITE(X): 메로리에 있는 변수 X의 값 => 데이터베이스에 저장

 

트랜잭션의 5가지 상태 변화

  1. 동작
    트랜잭션 시작 준비 or 실행 직후 상태
  2. 부분 커밋
    DBMS에 반영 안되고, 트랜잭션내의 메모리에서 연산이 끝난 상태
  3. 커밋
    모든 연산 끝나고 데이터베이스에 반영된 상태
  4. 실패
    오류 상태
  5. 중단
    실패되어 이전 상태로 롤백한 뒤

 

 

트랜잭션의 동시성

여러 사용자가 DB에 접근해서 일관성이 훼손이 걱정되긴 하지만,

동시에 진행하면, 처리속도, 자원 이용률 향상 그리고 대기 시간도 감소시킨다

 

동시에 처리하지만, 일관성, 고립성을 지켜주는 동시성

서로 다른 데이터는 같이 처리해도 되지 않을까

 

 

스케줄

직렬 스케줄

모든 트랜잭션이 순차적으로 실행

 

병렬 스케줄

하나의 트랜잭션이 완료되기 전에, 다른 트랙잭션이 실행

=> 일관성 훼손이 발생할 가능성이 있다

 

직렬 가능 스케줄

직렬 스케줄로 변환 가능한 스케줄

연산 순서를 바꿔서 충돌이 발생하지 않도록

 

같은 데이터의 읽고, 쓰기는 충돌하지만,

다른 데이터의 읽고, 쓰기는 교환할 수 있다

 

 

트랜잭션 회복

트랜잭션이 실패되면 원자성을 보장하기 위해서,

모든 연산을 실행 이전 상태로 복원(Rollback)

 

회복 불가능한 트랜잭션도 있다

이미 커밋한 데이터는 롤백 불가능하다

=> 회복 가능한 스케줄을 작성해야 한다

 

 

database by Pawel Czerwinski @unsplash