가. Row Cache 개요
: DDL 을 수행 하기 위해서는 반드시, Data Dictionary 정보에 대한 Row Cache Lock 을 획득 해야 한다.
Data Dictionary rows 에 대한 Lock 을 row cache enqueue lock 이라 부른다.
Row Lock Cache 는 인스턴스 기동(Startup) 후, 시스템 테이블스페이스(Systme Tablespace)에
저장된 시스템 운영에 관련된 오브젝트에 대한 Distionary 정보(테이블스페이스, 데이터 파일 등등)가 버퍼 캐쉬에 블록(block) 단위로 로드(Load)된다.
그 후 로드(Load)된 Dictionary 정보는 로우 캐쉬에 로우(Row)단위로 저장 된다.
Row Cache Lock 발생시 Alert Log 에 아래와 같은 메시지가 발생 한다.
">> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!<<"
다음의 쿼리를 통해 Shared Pool 에 할당된 로우 캐쉬를 확인 할 수 있다.
SQL> select pool, name, bytes/1024/1024 from v$sgastat
where name ='row cache';
SQL> select CACHE#, TYPE, SUBORDINATE# AS "Sub", PARAMETER,
GETS, GETMISSES as "MIS" from v$rowcache
order by cache#, subordinate# asc
Row Cache 구조
Dynamic Performance Views
V$ROWCACHE : ROW CHACHE 전체 사용 통계
V$ROWCACHE_PARENT : 개별 ROW CACHE OBJECT 사용 현황, Row Cache Lock 경합(Holder/Waiter)확인 가능
V$ROWCACHE_SUBORDINATE : Parent Row Cache Object 의 종속 Row Cache Object 정보
SQL> select CACHE#, TYPE, SUBORDINATE# AS "Sub", PARAMETER,
from v$rowcache
where CACHE#= 8 ;
SQL> select CACHE#, SUBCACHE#, SUBCACHE_NAME, EXISTENT, PARENT, ADDRESS
from V$ROWCACHE_SUBORDINATE
where CACHE# = 8 and rownum < 2 ;
주요 Row lock Cache Enqueue Type
1. DC_SEQUENCES - Sequence , Check Sequence Cache Option
2. DC_USED_EXTENT / DC_FREE_EXTENTS