ORA-04031 shared pool, unknown object, sga heap(5,0), ktmc_dlm_lck
ORA-04031 shared pool 메모리 단편화
shared pool에서 연속된 블록공간을 확보할 수 없을때 발생한다.
일반적으로 해결방법은 4가지이다.
- shared_pool_size 및 shared_pool_reserved_size 추가확보
- 많은공간을 사용하는 프로시저 sql등을 keep
- flush shared pool이나 db 재기동
- Literal SQL 을 찾아 해결한다.
위의 방법은 구글링하면 많이 나오는 답변이고,
대채로 일반적인 상황해서는 해결이 된다.
하지만 내가 겪은 상황은 다르다.
위의 문제로 해결할 수 없는 상황이다.
이유는 아래와 같다.
ktmc_dlm_lck
바로 ktmc_dlm_lck 라는 문구가 ORA-04031에러 메시지와 함께 나왔다는것.
이 문구로 구글링을 하면 자료가 별로 없다.
보통 에러를 확인할때에는 뒤에 붙은 문자열로 검색해야
원인을 빠르게 찾을 수 있다.
저 문자열을 oracle support에서 검색하면
단 하나의 자료를 확인할 수 있다.
( ORA-04031 Due To High Shared Pool Usage To "GCS DYNAMIC RESOURCES FG" With In-Memory Option (DBIM) (Doc ID 2200825.1)
해당 에러는 RAC환경에서 inmemory의 DLM,KCL lock과 관련이 있다.
실제로 해당 문서에서 제공하는 쿼리를 수행하면
일관성을 위한 lock을 수행하는데 필요한 메모리 공간이 얼마나 많이
사용되고 있는지 확인 할 수 있었다.
SELECT inst_id,decode(con_id,1,'1','*') con_id,pool,name , ROUND (SUM (bytes/ 1024 / 1024 / 1024), 2) gb
FROM gv$sgastat s
WHERE (pool = 'shared pool' and name in ('ktmc_dlm_lck','PDBHP') ) or (pool= 'numa pool' and name like 'gcs dynamic resources %')
GROUP BY inst_id,decode(con_id,1,'1','*'),pool,name
order by 1,2;결과는 보통 아래처럼 나온다.
INST_ID C POOL NAME GB
---------- - ------------ -------------------------- ----------
1 * shared pool ktmc_dlm_lck 7.6
...
1 * shared pool gcs dynamic resources fg 21.79
하지만 19c환경에서는 조건절의
pool = 'numa pool' 이라는 구문을 빼야 결과가 나온다.
이미 12c환경에서 bug로 판명이나서 patch파일이 존재한다.
하지만 내 환경은 19c이다보니 패치적용이 불가능한 상황.
이 경우 oracle에 sr오픈하여 정확한 진단을 받고
진행하는게 맞다.
끝.
'└ 01-02.ORACLE > ORA-' 카테고리의 다른 글
| event ORA$AT_OS_OPT_SY_????, ORA-27403, ORA-00600 (1) | 2024.09.05 |
|---|---|
| ORA-65096: invalid common user or role name (공통 사용자 또는 롤 이름이 부적합합니다.) (1) | 2023.12.08 |