[ STUDY ]/CS

[ 데이터베이스 ] 트랜잭션

김강니 2024. 11. 16. 00:42

트랜잭션

트랜잭션이란 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위 또는 일련의 연산을 의미한다.

 

트랜잭션의 4가지 특성(ACID)

    원자성(Atomicity)  트랜잭션이 데이터베이스에 완전히 반영되거나 아예 실행되지 않아야 한다.
    일관성(Consistency) 트랜잭션 수행이 완료된 데이터베이스는 일관성이 있다.
    독립성(Isolation) 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없다.
    영속성(Durability) 완료한 트랜잭션의 결과가 데이터베이스에 영구적으로 반영된다.

 

 

트랜잭션을 제어하기 위한 명령어(TCL)

    COMMIT 트랜잭션이 정상적으로 종료되어 데이터베이스에 변경 사항을 반영한다.
    ROLLBACK 트랜잭션이 비정상적으로 종료되어 트랜잭션이 수행한 변경 사항을 취소하고 데이터베이스를 이전 상태로 되돌린다.
    SAVEPOINT 트랜잭션에서 특정 지점을 지정한다
ROLLBACK과 함께 사용하면 해당 지점까지 되돌릴 수 있다.

 

 

트랜잭션 격리

    Read Uncommited 트랜잭션의 COMMIT여부에 상관없이 다른 트랜잭션이 데이터를 조회할 수 있다.
동시성은 높지만 일관성을 유지하기 어렵다.
    Read Commited COMMIT된 데이터만 조회가 가능하다
    Repeatable Read 트랜잭션이 읽은 데이터를 다른 트랜잭션이 갱신, 삭제할 수 없다.
    Serializable 트랜잭션이 읽은 데이터를 다른 트랜잭션이 갱신, 삭제, 삽입할 수 없다.

 

 

 

락은 트랜잭션이 처리되는 순서를 보장하기 위한 방법이다.

  • 공유 락(shared lock)
    데이터를 읽는 락
    읽는 연산이므로 데이터의 일관성에 영향을 주지 않아 여러 공유 락이 동시에 접근이 가능하다.
  • 베타 락(exclusive lock)
    데이터를 수정하는 락
    하나의 베타 락이 접근 중일 때 다른 베타 락이 접근할 수 없다.

 

교착 상태(deadlock)

한 트랜잭션이 자신이 처리 중인 데이터에 대해 락을 가진 상태에서 다른 트랜잭션이 처리 중인 데이터에 대해 락을 요청해 무한 대기 상태에 빠진 현상을 의미한다.

 

 

💡 교착 상태 예방하는 방법 ❗️❗️

  1. 예방 기법 : 트랜잭션 처리가 시작되기 전에 필요한 데이터에 대해 미리 락을 얻는 방식
  2. 회피 기법 : 트랜잭션이 들어온 순서에 따라 교착 상태를 회피하는 방식
    · wait-die : 락을 요청하려는 트랜잭션이 이미 락을 갖고 있는 트랜잭션보다 오래되었으면 기다림, 아니면 포기
    · wound-wait : 락을 요청하려는 트랜잭션이 이미 락을 갖고 있는 트랜잭션보다 오래되었으면 뺏기, 아니면 기다림

 

 

이상

트랜잭션을 처리하는 중에 속성 간 종속이나 데이터 중복으로 발생하는 문제

  • 삽입 이상(insertion anomaly) : 데이터 삽입 시 의도치 않은 다른 데이터도 삽입
  • 갱신 이상(update anomaly) : 데이터 갱신 시 일부 튜플만 갱신되어 데이터 모순 발생
  • 삭제 이상(deletion anomaly) : 데이터 삭제 시 의도하지 않은 데이터도 삭제

 

 

정규화

데이터베이스의 이상 현상을 해결하기 위해 테이블을 분해하는 것

  • 단점 : 테이블을 분해하느라 연산 시간이 증가
  • 장점 : 이상 현상을 해결하고 연산 속도를 보장한다.

 

정규형

정규화된 결과를 말한다.

 

  ⓐ 제 1 정규형

  테이블의 모든 속성 값이 더 이상 분해될 수 없는 값, 즉 원자 값으로 구성

 

  ⓑ 제 2 정규형

  부분적 함수 종속을 제거해 완전 함수 종속을 만든다.

 

  ⓒ 제 3 정규형

  이행적 종속이 없어야한다.

  a -> b, b- > c이면 a -> c 이다. 이걸 없애야함

 

  ⓓ BCNF 정규형

  모든 결정자가 후보 키가 되도록 테이블을 분해한다.

 

  ⓔ 제 4 정규형

  다치 종속 제거

 

  ⓕ 제 5 정규형

  조인 종속 제거

 

역정규화

정규화된 테이블을 낮은 정규화 단계의 테이블로 되돌리는 것

  • 읽기 성능을 향상시킬 때 사용
  • 테이블이 분해되면 필요한 결과 데이터를 얻기 위해 조인 연산을 여러 번 수행해야한다.
    -> 데이터베이스를 빈번히 조회하는 경우 성능 저하가 생길 수 있다.