📌 데이터베이스 트랜잭션과 내부 구조 (실무 관점 정리)
1. ACID와 Isolation Level
- ACID는 트랜잭션의 기본 원칙.
- 그중 **I (Isolation, 격리성)**을 세부적으로 구현한 것이 Isolation Level.
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 |