트랜잭션 Flashcards
트랜잭션
[정의] 커밋/롤백하기 전까지의 DB를 조작하기 위한 하나의 논리적 작업 단위를 이루는 연산의 집합
[특징] ACID (원자성, 일관성, 고립성, 영속성)
[상태전이] 실행, 부분완료, 완료, 실패, 철회, 종료
[보장기법]
<단일>
- Log 기록(트랜젝션 및 데이터 식별, 갱신 전/후 데이터 값 관리), Commit(DB 영구 저장), Rollback(실패시 변경 내역 폐기), Redo(장애로 인해 디스크에 기록되지 않는 커밋 트랜젝션 회복)
<멀티>
- 직렬화 검사(충돌 직렬화 검사, 우선순위 그래프), Locking(공유,전용), Timestamp(시스템 클락, 논리적 계수기), Snapshot(변경데이터 버전 관리, MVCC)
[회복기법] REDO, UNDO, Log, 체크포인트, 그림자 페이지
* 최근 확산 되는 MSA(Micro Service Architecture) 환경의 Polyglot 구조에 대한 트랜잭션 관리 이슈 고려 필요
[MSA 환경의 데이터베이스 트랜잭션 보장위한 고려사항]
- NoSQL,Message Broker 활용시 분산 트랜잭션 미지원 : SAGA 패턴 활용
- 이종DB사용,비동기 기반 IPC구조 활용에 따른 격리성 미지원 : 시멘틱 락,값 다시읽기 및 교환적 업데이트
* 분산 트랜잭션 설계 시 높은 동시성은 2PC(Two-Phase Commit), 높은 가용성은 SAGA 패턴을 활용
</멀티></단일>
모놀리식 환경과 MSA환경의 트랜잭션 차이
[도입] 트랜잭션 정의
* 모놀리틱 환경의 단일 DB, 데이터 쿼리 중심의 트랜잭션 구조와는 달리 MSA 환경에서는 Polyglot 기반의 서비스 중심 트랜잭션 구조로 인해 관리 측면의 차이점 존재
[특성 차이점]
- 트랜잭션 보장 특성 : ACID 지원 / A(원자성), I(고립성) 미지원
- IPC 방식 : 동기 기반 IPC / 비동기 기반 IPC
- 주요 성능 목표 : 데이터 일관성 중심 / 서비스 가용성 중심
- 분산 트랜적션 일관성 보장 기법 : 2PC / SAGA 패턴 통해 보완
* MSA 환경의 경우 모놀리틱 환경과 달리 분산, 이종 DB 환경의 격리성 미지원으로 추가적인 격리성 보장 방안 고려 필요
[MSA 환경의 격리성 보장 방안]
- 시멘틱 락(Semantic Lock) : Application 수준의 Lock 통한 참조 제어 (생성시 Pending, 완료시 Approve 상태 값 관리)
- 값 다시 읽기(Reread Value) : 최신 정보 확인 통한 Lost Update 방지 (데이터 쓰기 전 변경 여부 확인)
- 교환적 업데이트(Commutative Update) : 업데이트의 교환적 설계 통한 Lost Update 방지(debit(), credit() 업데이트 및 rollback 상호 교환적 작업 구성)
* MSA 환경의 트랜잭션 설계시 높은 동시성 보장은 2PC, 낮은 가용성 중심 트랜잭션은 SAGA 패턴 활용 고려
트랜잭션 특징
[리드] 트랜잭션의 무결성 보장 기본 성질
[특징] ACID (원일고영) / 상태 / 보장 방안
1. 원자성(Atomicity) : 분해가 불가능한 최소 단위로써 수행(All or Nothing) / 회복성 보장 (커밋/롤백)
2. 일관성(Consistency) : 트랜잭션 수행후 모순이 없는 상태 / 동시성 제어 기법(무결성 제약 조건)
3. 고립성(Isolation) : 수행중 다른 트랜잭션의 간섭 방지 / 동시성 제어 기법 (Locking, Isolation Level)
4. 영속성(Durability) : 완료 후 DB 반영 보장 / 회복 기법 (ARIES)
* 트랜잭션은 ACID 특성을 기반으로 무결성과 직렬성, 회복성을 보장 받음
* 빅데이터 처리 위한 NoSQL은 분산 처리 성능에 중점을 두어 BASE특성을 활용
[차별화] ACID vs BASE
- (적용분야) : RDBMS / NoSQL, - (중점사항) : 무결성,일관성 / 성능, 가용성, - (일관성 측면) : 강한 일관성 / 약한 일관성 - (적용범위) 트랜잭션 / 시스템 전체
트랜잭션 상태전이
[상태전이]
- 활동 상태(Active) : 초기 상태, 실행 시작/실행 중 상태 (실행중)
- 부분 완료(Partial Committed) : 마지막 명령문이 실행된 이후 가지는 상태 (Commit 직전 상태)
- 완료(Committed) : 트랜잭션의 성공적인 완료후 Commit 수행 (Commit 종료, DB 저장)
- 실패(Failed) : 비정상적인 트랜잭션 종료 상태 (Rollback)
- 철회(Aborted) : 트랜잭션이 실패하여 실행되기 이전으로 복귀 (Restart, Kill)
* 트랜잭션이 정상적으로 상태 전이되어 작업 수행위해 ACID가 보장되어야 함
트랜잭션 격리수준
[정의] 병행성과 일관성 수준을 Lock Level 통해 정의한 고립성 유지 위해 데이터를 허용하는 독립성 수준
[특징] (고일(일관성) 저병(병행성))
- ANSI/ISO SQL Standard, ACID 보장, Locking 기반
* 고립성을 유지하기 위한 데이터를 허용하는 수준
[격리수준] ANSI/ISO SQL표준(SQL92) 설명 / 비일관성 현상
0 Read Uncommited : 커밋전 데이터 다른 트랜잭션이 읽는 것 허용 / Dirty Read
1 Read Commited : 커밋된 데이터만 읽기 허용 / Non-repeatable Read
2 Repeatable Read : 트랜잭션 종료시까지 후행 트랜잭션 갱신, 삭제 불가 / Phantom Read
3 Serializable : 선행 트랜잭션 Read 데이터 후행 트랜잭션 갱신, 삭제 불가. 중간삽입도 방어 / 완벽한 일관성
* 트랜잭션 격리 수준을 높이면 일관성은 향상, 더 넓은 범 위의 Lock을 오랫동안 유지해야 하므로 동시성 저하
* 다중 버전 동시성 제어(MVCC)지원 DBMS 활용시 데이터 일관성 및 높은 동시성 유지가능
[차별화] 일관성과 동시성 Trade Off 관계
트랜잭션 직렬성
[정의] 트랜잭션들을 병행 처리한 결과가 순차적(직렬적)으로 수행한 결과와 같아지는 성질
[직렬성 저해 요인] (더리노리 팬)
1. Dirty Read : T1이 갱신 → T2 Read → T1 Rollback
2. Non-repeatable Read : T1 Read → T2 동일행 갱신 → T1 Read(동일행 2번검색)
3. Phantom Read : T1 특정조건 행검색 → T2 동일조건 행삽입 → T1 검색시 존재하지 않았던 행 보게됨
[직렬성 보장 방안]
- Locking(Shared, Exclusive), 2PL, Timestamp Ordering, Validation(낙관), MVCC
dirty read
[정의] 변경 후 아직 Commit 되지 않은 값 읽고, Rollback 후의 값을 다시 읽어 최종 결과 값이 상이한 현상
[해결방안]
- 격리 수준을 Read Commited로 설정
phantom read
[정의] 충돌 없는 두 개 이상의 트랜잭션이 삽입/삭제되려고 하는 가상의 튜플에 의해 일관성 깨짐 현상
[영향]
- (읽기) : 다른 트랜잭션의 삽입으로 처음에 없던 튜플이 나타남
- (쓰기) : 다른 트랜잭션의 삭제 동작으로 처음 쓰기에 있는 튜플이 재실행시 사라짐
[해결방안]
- Locking 확대 : Locking의 단위를 투플이 아니라 릴레이션으로 확대
- Index Locking : Locking 규약을 index에 적용
- 격리 수준을 Serializable로 설정 : SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
[사례] T1 특정조건 행검색→T2 동일조건 행삽입→T1 동일 검색
- T1 트랜잭션내에 같은 쿼리를 두번할 경우 중간 T2에 의해 없던 레코드가 두번째 T1 수행 결과에 나나타는 현상
동시성 제어
[리드] 데이터베이스 무결성 확보 방안, 동시성 제어
[정의] 다중 사용자 환경에서 동시 트랜잭션들이 성공적으로 실행 될 수 있도록 지원하는 기법
[필요성] 트랙잭션 직렬성, 데이터 무결성/일관성 보장
[이상현상] (갱현모연) - 제어 없는 경우
1. 갱신 손실 (Lost Update) : 덮어쓰기, 후행 트랜잭션 overwrite, 선행 트랜잭션 갱신무효화
2. 현황파악 오류 (Dirty Read) : 중간값 읽기 참조오류
3. 모순성 (Inconsistency) : 두 트랜잭션 동일데이터 갱신후, 출력값 불일치, 일관성 훼손
4. 연쇄복귀 (Cascading Rollback) : Rollback, 특정 트랜잭션 실행취소 → 타 트랜잭션 처리부분 취소불가능
[제어기법]
- Locking : 공유Lock, Lock-S(상호배제, Shared Lock, 타 트랜잭션은 READ만 가능), 전용Lock, Lock-X(Exclusive Lock, 타 트랜잭션은 READ&WRITE 모두 불가)
- 2PL : 단계별 lock/unlock 확장, 수축. 직렬가능성 보장가능 규약
- Timestamp Ordering : System Clock, 논리적 계수기, 교착상태방지
- MVCC : SCN(Data 변경시점-쿼리수행), Rollback Segment(Data의 과거버전), CR Copy(Rollback Segment 제공하는 과거Data), Snapshot too old(문제점)
- 낙관적 검증(Validation) : Read / Validation / Execution Phase
Locking
[리드] 상호 배제(Lock, Unlock) 기능 사용, Locking
[정의] 트랜잭션이 사용하는 자원(데이터 항목)에 대해 상호 배제(Mutual Exclusive) 기능을 제공하여 데이터의 무결성을 유지하는 기법
[종류]
1.공유(Shared) Lock : Read 만 가능, 다른 트랜잭션도 Read만 가능
2.전용(Exclusive) Lock : lock한 트랜잭션은 R/W 가능, 다른 트랜잭션은 R/W 불가
[Locking 단위와 동시성]
- (약한 동시성, 구현 간단) 데이터베이스 < 릴레이션(파일) < 튜플(레코드) < 속성(필드) (강한 동시성, 구현 복잡)
2PL
[리드] 확장 및 수축 단계를 이용한 동시성 제어기법, 2PL
[정의] 트렌젝션의 직렬성 보장 위해 확장단계의 Lock 연산과, 수축단계의 Unlock 연산을 이용하는 동시성 제어 기법
[특징] read_lock(), write_lock(), unlock() 연산으로 구성
[동작]
- 확장 단계 : Lock 연산만 수행, 다른 트랜젝션으 변경을 금지
- 차단 단계 : 트랜젝션의 필요 연산 수행
- 수축 단계 : Unlock 연산만 수행, 다른 트랜젝션의 변경을 허용
[문제점] 교착상태(Deadlock) 발생 가능성
- 예방과 탐지로 해결, wait-die, wound-wait기법 적용
- 개선된 2PL 기법 적용 : Strict 2PL, Rigorous 2PL, Static 2PL
[활용] 휴대용 단말 플래시 메모리
타임스탬프 순서
[정의] 트랜잭션의 순서대로 유일한 식별자인 타임스탬프를 지정하여 동시성 제어의 기준 식별
[특징] 직렬성 보장, 교착상태 보장, 연쇄 복귀(Cascading Rollback) 초래
[구성요소]
- 타임 스탬프 : 시스템 시간값을 트랜젝션에 부여
- 논리 계수기 : 트랜젝션 직렬화 수행
- read_TS(X) : 판독 타임스템프 (read(x)중 가장 최근에 발행한 타임스탬프로 가장 큰 값)
- write_TS(X) : 기록 타임스템프 (write(x)중 가장 최근에 발행한 타임스탬프로 가장 큰 값)
[활용] Wait-Die, Wound-Wait
낙관적 검증
[정의] 트랜잭션 수행 동안 어떠한 검사도 하지 않고, 트랜잭션 종료시 일괄적으로 검사하는 제어 기법
[특징] 빠른 속도, 트랜잭션 철회 비용 큼
[처리단계] (판확기)
1. 판독 단계(Read phase) : Buffer(메모리)에서 수행
2. 확인 단계(Validation phase) : 일괄로 위반여부 확인
3. 기록 단계(Write phase) : 성공시 디스크 반영
[트랜잭션 유효성 검사]
- Start(Ti), Validation(Ti), Finish(Ti), 판독집합(Read Set), 기록집합(Write Set)
MVCC
[정의] Locking없이 트랜잭션별 스냅샷 이미지의 유지/관리 통해 동시성을 보장하는 제어 기법
[특징] SCN 값 기준 Rollback Segment, Undo 영역 기반 동시성 관리
[구성요소]
<기준요소>
- Timestamp : 각 데이터 항목 버전 필드값 보유
- SCN(System Change Number) : Data, REDO, Control File 동기화 번호 (Data 변경시점-쿼리수행)
<제어요소>
- UNDO 영역 : 변경전 데이터는 Undo Segment 존재
- CR Copy : CR 블록 이용해 복사 (Rollback Segment 제공하는 과거Data)
- Rollback Segment : Data의 과거 버전
[문제점/해결방안]
- Undo 블록 I/O에 따른 오버 헤드 발생 : UNDO 크기 조정, 긴 트랜잭션 크기 조정
- Snapshot too old 오류 : 불필요한 Commit제한, 트랜젝션 튜닝, Undo 크기 조절
* UNDO 영역에 저장된 UNDO 정보가 다른 트랜잭션에 의해 재사용돼 필요한 CR Copy를 생성 불가시 Snapshot too old발생
</제어요소></기준요소>
2PC
[정의] 복수의 컴퓨터에 분산 배치되어 있는 데이터베이스를 갱신할 때 커밋 처리(commit processing)를 Prepare 단계와 Commit 단계의 2 단계로 나누어 제어하는 커밋
[특징] 신뢰성 증가(둘이상 트랜잭션을 하나의 Tx로 처리), 오버헤드 증가(각 트랜잭션 처리완료 여부 확인 후 처리)
[절차] 조정자→참여자
1. Prepare 단계 : Prepare to Commit. Reply
2. Commit 단계 : Commit/Rollback, Reply
[구성요소]
- 수행 측면 : 조정자(분산 트랜잭션 참여 참여자 목록), 지역노드( 지역 트랜잭션을 수행하는 서버)
- 절차 측면 : Prepare단계, Commit 단계
[비교] 2PC vs 2PL
- (개념) 분산 데이터베이스에서 동시성 제어 / 다중 트랜잭선에서 동시성 제어
- (보장) 원자성 / 직렬성
- (단계) Prepare,Commit / 확장,축소