충분히 쌓여가는
Transaction 트랜잭션 본문
Transaction 트랜잭션
- 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성
- 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
Transaction 특성
특성 | 설명 | 주요기법 |
원자성 (Atomicity) |
- 분해가 불가능한 작업의 최소단위 - 연산 전체가 성공 또는 실패(All or Nothing) - 하나라도 실패할 경우 전체가 취소되어야하는 특징 |
- Commit/Rollback - 회복성 보장 |
일관성 (Consistency) |
트랜잭션이 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 보존해야하는 특성 | - 무결성 제약조건 - 동시성 제어 |
격리성 (Isolation) |
- 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가한 특성 | - Read Uncommited - Read Commited - Repeatable Read - Serializable |
영속성 (Durability) |
성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장하는 특성 | 회복기법 |
ACID 원칙은 완벽히 지켜지지 않음
- ACID 원칙을 엄격하게 지키려면 동시성이 매우 떨어지기 때문
트랜잭션의 상태 변화
상태 | 설명 |
활동상태(Active) | 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태 |
부분완료 상태 (Partially Committed) |
마지막 명령문이 실행된 후에 가지는 상태 |
완료 상태(Committed) | 트랜잭션이 성공적으로 완료된 후 가지는 상태 |
실패 상태(Failed) | 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태 |
철회 상태(Aborted) | 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태 |
트랜잭션 제어
- 트랜잭션 제어 언어(TCL: Transaction Control Language)
- 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어
TCL 명령어
명령어 | 핵심 | 설명 |
커밋(COMMIT) | 트랜잭션 확정 | 트랜잭션을 메모리에 영구적으로 저장하는 명령어 |
롤백(ROLLBACK) | 트랜잭션 취소 | 트랜잭션 내역을 저장 무료화시키는 명령어 |
체크포인트(CHECKPOINT) | 저장 시기 설정 | ROLLBACK을 위한 시점을 지정하는 명령어 |
병행 제어(일관성 주요 기법)
- 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 ㅇ뉘해 상호작용을 제어하는 기법
병행 제어 목적
- 데이터베이스 공유 최대화
- 시스템 활용도 최대화
- 데이터베이스 일관성 유지
- 사용자에 대한 응답시간 최소화
병행 제어 미보장시 문제점
문제점 | 설명 |
갱신 손실(Lost Update) | 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류 |
현황 파악 오류(Dirty Read) | 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 경우 |
모순성(Inconsistency) | 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류 |
연쇄 복귀(Cascading Rollback) | 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 경우 |
병행 제어 기법 종류
기법 | 설명 |
로킹 (Locking) |
- 같은 자원을 엑세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법 - 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음 - 로킹 단위가 작아지면 데이터베이스 공유도 증가 - 로킹 단위가 작아지면 로킹 오버헤드 증가 - 로킹 단위: 한꺼번에 로킹할 수 있는 객체의 크기 |
낙관적 검증 | 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법 |
타임 스탬프 순서 (Time Stamp Ordering) |
트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법 |
다중버전 동시제어 (MVCC: Muti Version Concurrency Control) |
트랜잭션의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법 |
데이터베이스 고립화 수준(격리성 주요 기법)
- 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정보
고립화 수준 종류
수준 | 설명 |
Read Uncommitted | - 한 트랜잭션에서 연산(갱신) 중인(아직 커밋되지 않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준 - 연산(갱신) 중인 데이터에 대한 연산은 불허 |
Read Committed | - 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 읽리를 제한하는 수준 - 연산이 완료되어 커밋된 데이터는 다른 트랜잭션이 읽는 것을 허용 |
Repeatable Read | 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신/삭제를 제한하는 수준 |
Serializable Read | 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한하는 수준 |
회복 기법(영속성 주요 기법)
- 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
회복기법 종류
기법 | 설명 |
|
로그 기반 회복 기법 | 지연 갱신 회복 기법 (Deferred Update) |
트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법 |
즉각 갱신 회복 기법 (Immdiate Update) |
트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법 | |
체크 포인트 회복 기법 (Checkpoint Recovery) |
장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복 기법 | |
그림자 페이징 회복 기법 (Shadow Paging Recovery) |
데이터베이스 트랜잭션 수행시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법 |
참고자료
수제비 정보처리기사 실기 7-2 ~ 7-6
소프트웨어 꼰대 강의, 01. 데이터베이스 - 트랜잭션(Transaction) 개념 잡기
'IT > Computer Science' 카테고리의 다른 글
추상 클래스 / 인터페이스 (0) | 2023.01.16 |
---|---|
Git / GitHub (1) | 2023.01.13 |
TCP / UDP (1) | 2023.01.11 |
SOLID 5가지 설계 원칙 (2) | 2023.01.10 |
Design Pattern 디자인 패턴 (1) | 2023.01.09 |