"오라클 튜닝 테이블 실제 건수"의 두 판 사이의 차이
DB CAFE
(새 문서: == 스칼라서브쿼리 멀티로우 처리 == SELECT REGEXP_REPLACE(EXTRACT(dbms_xmlgen.getXmlType('select to_char(level) c from dual connect by level <= 10'), '/ROWSET/ROW/C'...) |
(→스칼라서브쿼리 멀티로우 처리) |
||
1번째 줄: | 1번째 줄: | ||
== 스칼라서브쿼리 멀티로우 처리 == | == 스칼라서브쿼리 멀티로우 처리 == | ||
+ | <source lang=sql> | ||
SELECT REGEXP_REPLACE(EXTRACT(dbms_xmlgen.getXmlType('select to_char(level) c from dual connect by level <= 10'), '/ROWSET/ROW/C' | SELECT REGEXP_REPLACE(EXTRACT(dbms_xmlgen.getXmlType('select to_char(level) c from dual connect by level <= 10'), '/ROWSET/ROW/C' | ||
).getStringVal(), '<C>|</C><C>|</C>', ', ' | ).getStringVal(), '<C>|</C><C>|</C>', ', ' | ||
7번째 줄: | 8번째 줄: | ||
CONNECT BY LEVEL <=5 | CONNECT BY LEVEL <=5 | ||
; | ; | ||
+ | </source> | ||
+ | ------------------------------------------------------------------------------ | ||
− | |||
− | |||
== 통계정보 차이 분석(실행주의:테이블 건수 실측 수행함) == | == 통계정보 차이 분석(실행주의:테이블 건수 실측 수행함) == | ||
<source lang=sql> | <source lang=sql> |
2019년 7월 12일 (금) 20:55 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 스칼라서브쿼리 멀티로우 처리[편집]
SELECT REGEXP_REPLACE(EXTRACT(dbms_xmlgen.getXmlType('select to_char(level) c from dual connect by level <= 10'), '/ROWSET/ROW/C'
).getStringVal(), '<C>|</C><C>|</C>', ', '
)
, dbms_xmlgen.getXmlType('select to_char(level)||'','' C from dual connect by level <= 10').EXTRACT('//text()').getclobval()
FROM DUAL
CONNECT BY LEVEL <=5
;
2 통계정보 차이 분석(실행주의:테이블 건수 실측 수행함)[편집]
WITH V1 AS (
SELECT A.OWNER, A.TABLE_NAME
, A.LAST_ANALYZED
, A.NUM_ROWS ANALYZED_ROWS
--, NUMTODSINTERVAL(SYSDATE - A.LAST_ANALYZED, 'DAY') DAY_GAP
, TRUNC(SYSDATE - A.LAST_ANALYZED) GAP_DAY
FROM DBA_TABLES A
WHERE 1 = 1
AND A.LAST_ANALYZED < TRUNC(SYSDATE - 30)
AND OWNER IN (SELECT USERNAME FROM DBA_USERS WHERE USER_ID > 100)
ORDER BY GAP_DAY DESC, 1, 2
)
, V2 AS (
SELECT ROWNUM AS RNO
, A.*
, TO_NUMBER(REGEXP_REPLACE(EXTRACT(DBMS_XMLGEN.GETXMLTYPE(
'SELECT /*+ PARALLEL(1) */ COUNT(*) C FROM '||A.OWNER||'.'||A.TABLE_NAME
), '/ROWSET/ROW/C'
).GETSTRINGVAL()
, '<C>|</C><C>|</C>', ''
)
) CURRENT_ROWS
FROM V1 A
-- WHERE ROWNUM < 100
)
SELECT A.*, ABS(A.ANALYZED_ROWS - A.CURRENT_ROWS) AS GAP_ROWS
, ROUND(ABS(A.ANALYZED_ROWS - A.CURRENT_ROWS) / GREATEST(A.ANALYZED_ROWS,1) * 100, 2) CHANGED_PCT
FROM V2 A
;