락(Lock)과 래치(Latch)는 모두 "동시성을 제어하기 위한 잠금 장치"라는 점은 같지만, 그 목적과 작동 방식은 다릅니다.
1. 락(Lock)
데이터베이스의 무결성을 지키는 것이 주 목적입니다.
- 대상: 테이블, 행(Row) 등 사용자가 관리하는 데이터(Object)
- 지속 시간: 트랜잭션이 시작될 때 걸리고, COMMIT이나 ROLLBACK을 할 때 풀립니다.
- 관리: Database 레벨에서 트랜잭션 단위로 관리되며, 데드락(Deadlock) 감지 메커니즘이 있습니다.
- 공유: 여러 종류(Shared, Exclusive 등)가 있고 복잡한 큐(Queue)를 통해 관리됩니다.
2. 래치(Latch)
SGA(System Global Area)와 같은 공유 메모리 구조가 깨지지 않게 보호하는 것이 주 목적입니다.
- 대상: Buffer Cache, Library Cache와 같은 메모리 자원
- 지속 시간: 메모리를 읽거나 쓰는 아주 짧은 순간에만 걸렸다가 바로 풀립니다.
- 관리: OS 레벨의 가벼운 동기화 도구를 사용하며, 데드락 감지 기능이 없습니다.
| 구분 | 락 (Lock) | 래치 (Latch) |
| 보호 대상 | 데이터 (Database Content) | 메모리 (SGA Memory Structure) |
| 주요 목적 | 트랜잭션의 일관성 및 무결성 | 물리적인 메모리 구조 보호 |
| 관리 단위 | 트랜잭션 (Transaction) | 프로세스 / 스레드 (Process) |
| 지속 시간 | 길다 (Commit 시까지) | 매우 짧다 (작업 직후 해제) |
| 충돌 시 | 대기 큐에서 대기 (Wait) | 스핀(Spin) 후 대기 |
| 데드락 | 감지 및 해결 메커니즘 있음 | 감지 안 함 (설계 시 방지) |
발생 예시
- 락(Lock)
- 사용자가 제어 가능
- SELECT ... FOR UPDAT 등 주로 DML 실행 시 Exclusive Lock(TX 락) 발생
- 래치(Latch)
- DB 엔진이 자동 제어
- DML 뿐만 아니라 메모리 영역(SGA)에 접근하는 모든 순간에 발생합니다.
- 많은 사용자가 동시에 실행 시 Library Cache에 수 많은 프로세스가 쿼리를 넣으려고 합니다. 이때 메모리 구조가 꼬이지 않게 Library Cache Latch를 잡아야 합니다.
- 락, 래치
- UPDATE emp SET sal = 50000 WHERE empno = 100; 실행 시
- 1) 래치 발생: 메모리(Buffer Cache)에서 100번 사원 데이터가 어디 있는지 찾기 위해 메모리 구조를 뒤지는 동안 래치를 잡습니다.
- 2) 데이터 발견: 메모리에서 데이터를 찾으면 래치를 즉시 풉니다.
- 3) 락 발생: 해당 행(Row)을 수정하기 위해 락(Exclusive Lock)을 겁니다.
- 4) 락 유지: 수정 후에도 COMMIT을 할 때까지 락은 계속 유지됩니다.
- UPDATE emp SET sal = 50000 WHERE empno = 100; 실행 시
주요 대기 이벤트
- 락 대기: enq: TX - row lock contention 등 (주로 SQL 로직 문제)
- 래치 대기: latch free, latch: library cache, latch: cache buffers chains 등 (주로 시스템 부하, 파싱 부하 문제)
'🗄️ DB_이야기 > # 🛢️ Oracle' 카테고리의 다른 글
| [Oracle] Data Pump(expdp/impdp) 커맨드 모음 (1) | 2026.05.12 |
|---|---|
| [Oracle] RMAN 커맨드 (0) | 2026.05.10 |
| [Oracle] 출력 결과가 '#(샵)'으로 나오는 경우 (0) | 2026.03.24 |
| [Oracle] Oracle Archtecture(7) [Lock] (0) | 2026.03.21 |
| [Oracle] Oracle Archtecture(6) [데이터파일&테이블스페이스] (1) | 2026.03.20 |