V$INDEXED_FIXED_COLUMN 뷰에서 일부 FIXED 테이블에 대한 정보가 누락된 것으로 보인다.
아래는 V$SQL 뷰를 sql_id로 조회한 쿼리의 실행 계획이다. X$KGLCURSOR_CHILD 테이블이 V$SQL 뷰의 베이스 테이블이고, 해당 테이블의 kglobt03 열(= sql_id)이 인덱싱된 것을 확인할 수 있다.
-- 1 SELECT * FROM v$sql WHERE sql_id = '4u5074pdutxzs'; ------------------------------------------------------------- | Id | Operation | Name | ------------------------------------------------------------- | 0 | SELECT STATEMENT | | |* 1 | FIXED TABLE FIXED INDEX| X$KGLCURSOR_CHILD (ind:2) | -- ! ------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("KGLOBT03"='4u5074pdutxzs' AND "INST_ID"=USERENV('INSTANCE'))
V$INDEXED_FIXED_COLUMN 뷰에서 X$KGLCURSOR_CHILD 테이블을 조회하면 결과가 반환되지 않는다.
-- 2 SELECT * FROM v$indexed_fixed_column WHERE table_name = 'X$KGLCURSOR_CHILD'; 선택된 레코드가 없습니다.
아래는 V$INDEXED_FIXED_COLUMN 뷰의 소스다.
-- 3 SELECT a.kqftanam AS table_name , b.kqfcoidx AS index_number , b.kqfconam AS column_name , b.kqfcoipo AS column_position FROM x$kqfta a , x$kqfco b WHERE a.kqftanam = 'X$KGLCURSOR_CHILD' AND b.kqfcotab = a.indx AND b.kqfcoidx != 0; 선택된 레코드가 없습니다.
X$KGLCURSOR_CHILD 테이블이 X$KQFTA 테이블이 아닌 X$KQFDT 테이블에 저장되어 있기 때문에 결과가 반환되지 않은 것이다. 4-4번 쿼리에서 X$KGLCURSOR_CHILD 테이블이 X$KGLOB 테이블의 메모리 구조를 공유하고 있다는 사실을 유추할 수 있다.
-- 4-1 SELECT kqftaobj, kqftanam FROM x$kqfta WHERE kqftanam = 'X$KGLCURSOR_CHILD'; 선택된 레코드가 없습니다. -- 4-2 SELECT kqfdtobj, kqfdtnam, kqfdtequ FROM x$kqfdt WHERE kqfdtnam = 'X$KGLCURSOR_CHILD'; KQFDTOBJ KQFDTNAM KQFDTEQU ---------- ------------------------- -------- 4294952683 X$KGLCURSOR_CHILD X$KGLOB 1개의 행이 선택되었습니다. -- 4-3 SELECT kqftaobj, kqftanam FROM x$kqfta WHERE kqftanam = 'X$KGLOB'; KQFTAOBJ KQFTANAM ---------- -------- 4294950985 X$KGLOB 1개의 행이 선택되었습니다. -- 4-4 SELECT kqfdtobj, kqfdtnam, kqfdtequ FROM x$kqfdt WHERE kqfdtequ = 'X$KGLOB'; KQFDTOBJ KQFDTNAM KQFDTEQU ---------- ------------------------- -------- 4294951056 X$KGLTABLE X$KGLOB 4294951057 X$KGLBODY X$KGLOB 4294951058 X$KGLTRIGGER X$KGLOB 4294951059 X$KGLINDEX X$KGLOB 4294951060 X$KGLCLUSTER X$KGLOB 4294951061 X$KGLCURSOR X$KGLOB 4294952684 X$KGLCURSOR_CHILD_SQLID X$KGLOB 4294952680 X$KGLCURSOR_CHILD_SQLIDPH X$KGLOB 4294952683 X$KGLCURSOR_CHILD X$KGLOB 4294953372 X$KGLCURSOR_PARENT X$KGLOB 4294953759 X$KGLSQLTXL X$KGLOB 11 행이 선택되었습니다.
아래 쿼리로 X$KGLCURSOR_CHILD 테이블의 인덱싱 칼럼을 조회할 수 있다.
-- 5 SELECT a.kqftanam AS table_name , b.kqfcoidx AS index_number , b.kqfconam AS column_name , b.kqfcoipo AS column_position FROM (SELECT a.kqftanam , a.indx FROM x$kqfta a -- WHERE NOT EXISTS (SELECT 1 -- FROM x$kqfdt x -- WHERE x.kqfdtequ = a.kqftanam) UNION ALL SELECT a.kqfdtnam , b.indx FROM x$kqfdt a , x$kqfta b WHERE b.kqftanam = a.kqfdtequ) a , x$kqfco b WHERE a.kqftanam = 'X$KGLCURSOR_CHILD' AND b.kqfcotab = a.indx AND b.kqfcoidx != 0; TABLE_NAME INDEX_NUMBER COLUMN_NAME COLUMN_POSITION ----------------- ------------ ----------- --------------- X$KGLCURSOR_CHILD 1 KGLNAHSH 0 X$KGLCURSOR_CHILD 2 KGLOBT03 0 2 행이 선택되었습니다.
'Oracle > Internal' 카테고리의 다른 글
X$ Fixed 테이블 약어 (0) | 2019.04.21 |
---|---|
X$ Fixed 테이블 (0) | 2019.04.20 |