본문 바로가기
🗄️ DB_이야기/# 🛢️ Oracle

[Oracle] 락(Lock) 과 래치(Latch)

by gwon_s 2026. 4. 27.

락(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) 후 대기
데드락 감지 및 해결 메커니즘 있음 감지 안 함 (설계 시 방지)

발생 예시

  1. 락(Lock)
    • 사용자가 제어 가능
    • SELECT ... FOR UPDAT 등 주로 DML 실행 시 Exclusive Lock(TX 락) 발생
  2. 래치(Latch)
    • DB 엔진이 자동 제어
    • DML 뿐만 아니라 메모리 영역(SGA)에 접근하는 모든 순간에 발생합니다.
    • 많은 사용자가 동시에 실행 시 Library Cache에 수 많은 프로세스가 쿼리를 넣으려고 합니다. 이때 메모리 구조가 꼬이지 않게 Library Cache Latch를 잡아야 합니다.
  3. 락, 래치
    • UPDATE emp SET sal = 50000 WHERE empno = 100; 실행 시
      • 1) 래치 발생: 메모리(Buffer Cache)에서 100번 사원 데이터가 어디 있는지 찾기 위해 메모리 구조를 뒤지는 동안 래치를 잡습니다.
      • 2) 데이터 발견: 메모리에서 데이터를 찾으면 래치를 즉시 풉니다.
      • 3) 락 발생: 해당 행(Row)을 수정하기 위해 락(Exclusive Lock)을 겁니다.
      • 4) 락 유지: 수정 후에도 COMMIT을 할 때까지 락은 계속 유지됩니다.

 

주요 대기 이벤트

  • 락 대기: enq: TX - row lock contention 등 (주로 SQL 로직 문제)
  • 래치 대기: latch free, latch: library cache, latch: cache buffers chains 등 (주로 시스템 부하, 파싱 부하 문제)