■ shared pool latch & 서브 풀
1. Shared Pool Latch
- Hard Parsing이 발생할 때, 즉 SQL 문이 처음 분석되고 실행 계획이 생성되어야 할 때, 해당 SQL 문에 대한 메모리를 할당받기 위해 Shared Pool Latch를 획득해야 한다. Shared Pool Latch는 여러 세션 간에 공유 메모리 영역인 Shared Pool의 자원을 보호하기 위한 lock이다.
2. Shared Pool Subpooling (서브풀링)
- Oracle 9i 이후부터는 Shared Pool을 여러 개의 서브풀(subpool)로 나누어 관리한다. 이는 고성능을 유지하기 위한 메커니즘이며, CPU 개수가 4개 이상이고 Shared Pool 메모리 크기가 250MB 이상인 경우, '_kghdsidx_count'의 값만큼 서브풀을 동적으로 생성하여 관리한다.
- 서브풀을 사용함으로써 Shared Pool Latch의 경합을 줄이고, 성능을 최적화하는 것이 목적이다.
#) latch에 대한 정보 확인
select name, gets from v$latch_children where name = 'shared pool';
#) 종속 확인
show parameter cpu_count
2 => '1' 라고 생각
#) DB의 session 및 인스턴스 레벨에서 특정 파라미터의 값 확인
- a.ksppinm = '_kghdsidx_count' => 이 값만큼 서브 pool 생성
#1) x$ksppi (Initialization Parameters) : 초기화 파라미터에 대한 정보 테이블 → 파라미터 이름(ksppinm), 인덱스(indx)
#2) x$ksppcv (Current Values) : 현재 세션의 초기화 파라미터 값 저장 테이블 → 현재 세션의 파라미터 값(ksppstvl)
#3) x$ksppsv (System Values) : 현재 인스턴스의 초기화 파라미터 값 저장 테이블 → 현재 인스턴스의 파라미터 값(ksppstvl)
(참고) v$ 의 종속되어 있는 테이블 => x$ 테이블
SELECT a.ksppinm Parameter, b.ksppstvl Session_Value, c.ksppstvl Instance_Value
FROM x$ksppi a, x$ksppcv b, x$ksppsv c
WHERE a.indx = b.indx
AND a.indx = c.indx
AND a.ksppinm = '_kghdsidx_count';
■ library cache latch
1. Shared Pool 내에 있는 Library Cache에 동일한 SQL 문이나 PL/SQL 문이 존재하는지를 탐색하는 용도로 사용
- 공유 SQL 문장의 캐시 상태를 확인하고, 새로운 SQL 문장이나 PL/SQL 문장이 Library Cache에 있는지 검사하는데 사용
2. CPU 수에 종속
- '무조건' cpu 수에 종속되어 있다. 많을 수록 여러 CPU 간에 latch 경합이 발생할 가능성이 높아지기 때문
- 시스템의 CPU 수에 따라 Library Cache Latch 경합이 발생할 가능성이 있으며, 이를 최소화하기 위해 CPU 구성과 메모리 할당을 고려하는 것이 중요
3. latch : library cache
- Shared Pool 내의 Library Cache에 대한 라치 중 하나
- 여러 세션 간에 공유 자원에 대한 동시 액세스를 제어하기 위한 동기화 메커니즘으로 사용
'Data Base > SQL 튜닝' 카테고리의 다른 글
Row Cache Lock (0) | 2024.02.05 |
---|---|
Version Count_ 바인드 변수 size 설정 (0) | 2024.02.05 |
Library Cache Pin _ procedure 생성 후 library cache pin 확인 (0) | 2024.02.05 |
Library Cache Lock_table 생성, 대량의 Data (1) | 2024.02.05 |
Library Cache Lock _ 같은 session에서 procedure 실행 후 wait event 확인 (0) | 2024.02.05 |