반응형

📌 데이터베이스 트랜잭션과 내부 구조 (실무 관점 정리)

1. ACID와 Isolation Level

  • ACID는 트랜잭션의 기본 원칙.
  • 그중 **I (Isolation, 격리성)**을 세부적으로 구현한 것이 Isolation Level.
Isolation LevelDirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTED 발생 발생 발생
READ COMMITTED 방지 발생 발생
REPEATABLE READ 방지 방지 발생 (InnoDB는 MVCC + Next-Key Lock으로 해결)
SERIALIZABLE 방지 방지 방지

 


✅ 트랜잭션과 관련된 다른 개념 (계층, 구조 등)

1. ACID 속성 트랜잭션의 기본 원칙:
Atomicity (원자성): 모두 성공하거나 모두 실패해야 함
Consistency (일관성): 트랜잭션 전후 데이터가 무결성 유지
Isolation (격리성): 다른 트랜잭션과 독립적으로 수행
Durability (지속성): 커밋된 데이터는 영구 반영

 

 

➡️ Isolation Level은 ACID 중 **I (격리성)**을 어떻게 구현할지에 대한 세부 옵션.

2. MVCC (Multi Version Concurrency Control) – 다중 버전 동시성 제어

주로 READ COMMITTED 또는 REPEATABLE READ에서 사용됨.

데이터를 수정할 때 기존 버전을 유지해서 트랜잭션마다 스냅샷을 보는 것처럼 처리.

Oracle, PostgreSQL, InnoDB 등에서 MVCC 사용.

트랜잭션마다 Undo Log 혹은 Rollback Segment를 참조해서 과거 데이터를 조회함.

 

2. MVCC (Multi-Version Concurrency Control)

트랜잭션이 동시에 같은 데이터를 읽고 쓸 때 충돌을 줄이는 방식.
👉 핵심 아이디어: “읽는 트랜잭션은 과거 버전을 보고, 쓰는 트랜잭션은 새로운 버전을 만든다.”

(1) 동작 원리

  • INSERT → 새로운 Row 생성.
  • UPDATE → 새로운 버전(Row)을 만들고, 기존 Row는 Undo Log에 보관.
  • DELETE → 실제 삭제하지 않고 "삭제 플래그"를 기록.
  • SELECT → 트랜잭션 시작 시점의 Snapshot(Undo Log 참조)으로 읽음.

(2) DBMS별 MVCC 구현

  • Oracle : Undo Segment 기반. SELECT는 Undo에 있는 과거 버전을 읽음.
  • PostgreSQL : Tuple 버전 관리 → Vacuum(청소 작업) 필요.
  • MariaDB/InnoDB : Undo Log + Redo Log 조합. Snapshot 읽기 지원.

3. Locking 계층 (동시성 제어)

트랜잭션 충돌을 제어하기 위해 락을 건다.

(1) 주요 락 단위

  • Row-Level Lock : InnoDB. 동시성 높음.
  • Table-Level Lock : MyISAM, 일부 DDL. 단순하지만 동시성 낮음.
  • Gap Lock / Next-Key Lock : Phantom Read 방지용 (InnoDB).

(2) Intent Lock

  • 계층적 락 구조에서 충돌 체크용.
  • 예: 테이블 전체 락 vs 특정 Row 락이 충돌하는지 빠르게 판단.

(3) 락 경합(Tuning 관점)

  • innodb_row_lock_waits : 락 충돌 횟수
  • innodb_row_lock_time_avg : 평균 대기 시간
  • 해결책:
    • 트랜잭션 단위를 짧게 유지
    • 인덱스 튜닝 → 불필요한 Range Scan 줄이기
    • Batch Update 대신 Chunk Update

4. Undo / Redo 로그 계층

(1) Undo Log

  • MVCC 지원 : 과거 버전 데이터를 저장.
  • Rollback 지원 : 트랜잭션 실패 시 원상 복구.
  • InnoDB는 Undo Tablespace에 저장.

(2) Redo Log

  • 장애 복구용 : Commit된 변경 사항을 기록.
  • DB Crash 후 Redo Log를 리플레이하여 데이터 복원.
  • InnoDB는 Write-Ahead Logging (WAL) 사용 → 먼저 Redo Log에 기록 후 실제 데이터 반영.

✅ 요약 (한눈에 보기)

영역설명실무 포인트
Isolation Level 동시성 제어 옵션 성능 ↔ 일관성 Trade-off
MVCC 버전 기반 동시성 제어 Undo 관리 & Snapshot Read
Locking Row/Table/GAP/Intent 경합 분석 → 인덱스/쿼리 튜닝
Undo Log 과거 버전/롤백 관리 장기 트랜잭션 시 Undo 부하 ↑
Redo Log Commit/복구 보장 로그 사이즈/Flush 전략 중요

'ORACLE > 공부하기' 카테고리의 다른 글

Oracle RAC의 Cache Fusion 캐시퓨전(2)  (1) 2024.02.23
Oracle RAC의 Cache Fusion 캐시퓨전(1)  (0) 2024.02.23
[성능튜닝] ASH(Active Session History)  (0) 2019.08.31
undo tablespace full 관련  (0) 2019.08.24
CRS 설명  (0) 2019.07.04
Posted by Max-Jang
,