Skip to the content.

Latch

설명

오라클이 사용하는 제어 구조 중 하나. 자원에 대한 접근을 직렬화 (Serialize) 하는 것이 목적. SGA의 특정 메모리 구조체에 대한 액세스 (Libaray Cache Latch, Cache Buffers Chains Latch) 혹은 메모리 할당 (Shared pool Latch) 에 사용되거나 Redo 로그 쓰기 작업 (Redo Writing Latch) 에도 사용됨


특징

  1. Enqueue와는 다르게 큐로 관리되지 않으므로 먼저 요청한 프로세스가 먼저 Latch를 얻는다는 보장이 없음 (대부분 Exclusive 모드로 얻음)
  2. 그러므로 Enqueue 보다 하위 레벨에서 Locking 자체의 부하를 최소화하며 작동함


Latch 종류 확인

--19c 기준으로 약 1100개가 있음
SELECT * FROM V$LATCHNAME;


Latch 정보 확인

--각 Latch의 얻은 횟수, Sleep에 들어간 횟수 확인
--얻은 횟수 (GETS) 와 Sleep (SLEEPS) 의 비율, Sleep이 몇 번의 사이클이 돌았는지 여부 (사이클이 많을 수록 심각성 증가)
SELECT * FROM V$LATCH;
/*
ADDR	LATCH#	LEVEL#	NAME	HASH	GETS	MISSES	SLEEPS	IMMEDIATE_GETS	IMMEDIATE_MISSES	WAITERS_WOKEN	WAITS_HOLDING_LATCH	SPIN_GETS	SLEEP1	SLEEP2	SLEEP3	SLEEP4	SLEEP5	SLEEP6	SLEEP7	SLEEP8	SLEEP9	SLEEP10	SLEEP11	WAIT_TIME	CON_ID
...
(VARBYTES)	23	7	process allocation	2600548697	5453	17	1	0	0	0	0	16	0	0	0	0	0	0	0	0	0	0	0	8067	0
...
*/


Latch 얻는 방식



Parent Latch

--Parent Latch
SELECT * FROM V$LATCH_PARENT;

하나의 Latch로만 운영되는 Latch를 말함 (예를 들어 Shared Pool Latch의 경우 Shared Pool 안에서 메모리 할당을 위해 얻어야하는 Latch로 시스템에 하나만 있음)


Child Latch

--Child Latch
SELECT * FROM V$LATCH_CHILDREN;

동일한 기능을 가진 Child Latch들이 Set로 운영되는 Latch를 말함 (예를 들어 Cache Buffers Chains Latch의 경우 같은 이름의 Latch들이 서로 나누어서 담당함)


Latch 항목


참고 자료