Database

[ SQLD 이론 기초 ] Chapter 06. 트랜잭션

noahkim_ 2021. 7. 28. 13:47

1. 트랜잭션이란

시스템에 요청명령을 한부에 끝낸 상태

 

  • 트랜잭션의 4대 특징
    - 원자성 : 데이터 조작이 전부 성공 혹은 실패할지 보증하는 구조
    - 일관성 : 데이터 조작 전후에 일관성 유지 필요
    - 고립성 : 복수 사용자가 동시에 데이터 조작 실행할 경우 각각의 처리가 모순 없이 실행되는 것을 보증
    - 지속성 : 데이터 조작 완료 후 완료 통지 받는 시점에서 결과를 잃지 않는 것.
                   즉, 트랜잭션이 Commit 되고 나면 데이터 변경 사항이 영구적으로 확정되도록 보장하는 것.

2. 트랜잭션 처리의 필요성

  • 원자성
    트랜잭션은 전부 성공하거나 혹은 전부 실패해야 한다.
    부분 성공이라는 단어는 절대로 존재하면 안됨

  • 고립성
    사용자 A가 해당 데이터를 조작중이라면 다른 사용자들은 사용자 A가 작업이 끝날때까지 데이터 접근 못함

3. 트랜잭션 격리 수준

  • 표준 격리 수준
    - Read Uncommitted : Commit되지 않은 읽기 -> 일관성 X
    - Read Committed : Commit된 읽기. 트랜잭션이 Commit 확정된 데이터만 다른 트랜잭션이 읽도록 허용
    - Repeatable Read
    - Serializable

  • 격리 수준이 완화되면서 직렬화 가능에서 없었던 현상 발생
    - Dirty Read : 어떤 트랜잭션이 Commit 되기 전 다른 트랜잭션에서 데이터 읽음
                            변경 후 아직 Commit되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭                            션은 비 일관된 상태에 놓이게 됨

    - Phantom Read : 유령읽기
                                   어떤 트랜잭션을 읽을 때 선택할 수 있는 데이터가 나타나거나 사라지는 현상
                                   한 트랜잭션 내에서 같은 쿼리를 두번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나                                 는 현상

4. 락과 데드락

DB의 동시성, 일관성 유지를 위해 사용되는 개념.

 


  • 데이터를 수정중이라는 사실을 알리는 잠금장치

    - 유형
      공유락(LS) : 다른 세션이 읽기만 가능 
      배타락(LX) : 아무 작업도 못하게 함

  • 데드락
    자신의 데이터에 대하여 각각 락을 가지고 있고 상대방에 대하여 락을 요청하면 교착상태에 빠짐. 
    데드락이 발생시 요청하는 트랜잭션중 하나를 종료시켜 정상적으로 실행하도록 함.
    이때 종료시키는 트랜잭션에서 변경한 데이터는 원래 상태로 되돌려놓음

5. 트랜잭션 처리 시 주의 사항

  • 데드락 최소화
    트랜잭션을 자주 커밋
    정해진 순서로 테이블 액세스
    필요없을 때는 읽기 잠금 획득 사용을 피함

  • 자제해야하는 트랜잭션 처리
    Auto commit : 쿼리 단위로 커밋하는 설정. 부하가 너무 큼
    긴 트랜잭션 : 타임 아웃 및 교착 상태 발생 가능
    트랜잭션 관련 설정 확인 : 트랜잭션 격리 수준을 로직에 맞게 잘 조정한다