반응형

트랜잭션(Transaction)의 개념

하나의 논리적 기능을 수행하기 위한 작업의 단위

한 번에 수행되어야 할 DB의 일련의 Read와 Write 연산을 수행하는 단위

 

ACID 특징

  1. Atomicity (원자성)
    • 한 개 이상의 동작이 논리적으로 한 개의 작업 단위
    • 연산 전체가 성공적으로 처리되거나 실패할 경우 전체가 취소되도록 보장
    • 관리주체 : 트랜잭션 관리자
  2. Consistency (일관성)
    • 트랜잭션이 실행 성공 후 항상 모순 없이 일관성 있는 DB 상태 보존
    • 관리주체 : 무결성 제어기
  3. Isolation (고립성)
    • 트랜잭션 실행 중 생성하는 연산의 중간결과를 다른 트랜잭션 접근 불가
    • 관리주체 : 병행 제어 관리자
  4. Durabillity (영속성)
    • 성공이 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장됨
    • 마음대로 데이터가 삭제되거나 변경되면 안 된다.
    • 관리주체 : 연관 회복 관리자

 

트랜잭션 상태도

 

Partially Committed (부분적 완료)

트랜잭션이 시작하고 어떤 질의어들이 성공을 하게 되면 Partially Committed 상태가 되는데 Partially Committed는 오류가 없이 Commit 직전까지 모든 질의어가 수행되는 상태를 말한다.

 

상태 설명 전이
Active 초기 상태, 트랜잭션 실행 시작 또는 실행 중인 상태 Partially Committed,
Failed
Partially Committed 마지막 명령문이 실행된 후 Commit 직전 상태
Commit 명령이 도착한 상태
Failed, Commit
Failed 정상적인 실행이 진행될 수 없는 상태 Aborted
Aborted 트랜잭션 실행이 실패하여 취소되고 트랜잭션 시작 전 상태로 환원된 상태 (Rollback) 종료
Committed 성공이 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장 종료

 

동시성 제어

  • 멀티 프로세스 환경을 지워 나는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
  • DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호 간섭에서 Database를 보호하는 것을 의미

트랜잭션 여러 개가 동시에 접근했을 때 직렬화 수행을 통해 데이터를 한 번씩 접근하도록 보장하는 기능
직렬화 수행을 하지 않았을 경우, Dirty Read나 Phantom Read 등 문제 있는 데이터가 나타날 수 있다.
동시성 제어와 성능은 반비례하다.

 

동시성 제어를 하지 않았을 때 문제점

구분 설명
갱신 손실 (Lost Update) 트랜잭션들이 동일 데이터를 동시에 갱신 할 경우 발생
이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신 값을 덮어쓰는 경우 발생
현황파악오류 (Dirty Read) 트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
모순성 (Inconsistency) 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제
연쇄복귀 (Cascading Rollback) 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능
반복할 수 없는 읽기 (Unrepeatable Read) 한 트랜잭션 내에서 같은 질의를 2번 수행했을 때 그 사이 다른 트랜잭션의 간섭으로 결과가 다르게 나오는 오류

 

동시성 제어의 목적

  • 트랜잭션의 직렬 성 보장 및 동시 수행 트랜잭션 처리량 최대화
  • 데이터의 무결성 및 일관성 보장
  • 공유도 최대, 응답 시간 최소, 시스템 활동의 최대 보장

동시성 제어 기법들

  • 2-Phase Locking 기법
    • 특정 트랜잭션이 하나씩 수행될 때 프로그램의 쿼리에 잡힌 테이블들을 트랜잭션이 실행되기 전 Lock을 잡고 다시 하나씩 Unlock으로 푸는 기법
  • TimeStamp Ordering 기법
    • 트랜잭션마다 시간을 부여해서 먼저 도착한 트랜잭션 순으로 실행시키는 기법
  • 낙관전 검증(Validation) 기법
    • Read, Validation, Write 3단계 구간에 교차되는 구간이 있는지 검사하면서 실행하는 기법
  • 다중 버전 병행 제어 기법 - MVCC(Multi-Version Concurrency Control)
    • Update 또는 Delete 문이 실행될 때 Update 전의 데이터를 Undo 영역에 백업을 하고 최신의 SCN(System Commit Number) 값을 Undo 영역에서 조회를 해서 아직 갱신되지 않은 직전의 데이터를 가지고 오는 기법
    • Lock을 잡는 순간이 더 짧다

 

Isolation Level

  • 트랜잭션 실행 중 중간 연산 결과가 다른 트랜잭션으로 접근 불가하도록 하는 고립성을 유지하기 위한 데이터의 허용 수준
  • SQL-92 표준에서 4단계로 표준화, 대부분의 DBMS 벤더들이 준수하고 있다.
레벨 상태 설명 전이
0 Read Uncommitted 트랜잭션에서 처리중인 아직 Commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 Dirty Read
Nonrepeatable Read
Phantom Read
1 Read Committed 트랜잭션이 Commit 되어 확정된 데이터만 읽는 것을 허용 (해당 데이터만 shared lock) Nonrepeatable Read
Phantom Read
2 Repeatable Read 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신, 삭제 불가 Phantom Read
3 Serializable 선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐 아니라 중간에 새로운 레코드를 삽입도 금지 모두 발생 불가
Select 테이블 전체 Lock

 

문제점

Dirty Read

  • 트랜잭션 A가 수정 중인 데이터를 트랜잭션 B가 조회를 하고, 문제가 발생해 Rollback을 했을 경우 트랜잭션 B는 수정된 데이터로 로직을 실행한다.

Non-repeatable Read

  • 트랜잭션 B가 데이터를 두 번 조회할 때, 그 사이에 트랜잭션 A가 값을 수정 또는 삭제했을 경우 데이터가 다르게 나타나는 문제가 발생한다.
  • 은행 관련 서비스에 문제가 발생할 수 있다.

Phantom Read

  • 트랜잭션 B가 데이터를 두번 조회할 때, 첫번째 데이터에는 없었던 유령(Phantom) 데이터가 발생하는 현상이다.
  • 테이블에 전체 lock을 걸지 않았기 때문에 발생한다.

 

Isolation level 설정값 확인 명령어

show variable like 'tx_isolation';

Isolation level 설정 변경 명령어

set tx_isolation='READ-COMMITED';

 

반응형

'DB > DBMS' 카테고리의 다른 글

[DBMS] DBMS 질의어  (0) 2022.10.31
[DBMS] DBMS의 정의  (0) 2022.10.28
[DBMS] 데이터 독립성  (0) 2022.10.27
[DBMS] DataBase란?  (0) 2020.11.29

+ Recent posts