배치 튜닝시 DBMS_SQLTUNE 패키지로 실시간 SQL 모니터링하여 "실행 계획 및 데이터 분배 점검"을 한다.
select dbms_sqltune.report_sql_monitor(sql_id=>'6f4131zagk5rg') from dual;
그런데 패키지 이용시 "SQL Monitoring Report" 문구만 출력되는 경우가 있다.
이때 아래 1가지 설정 변경 후 해결이 되었다.
1. _sqlmon_max_planlines Parameter 수치 변경
: Parmeter 의미는 실시간 SQL 모니터링 될 수 있는 SQL의 "실행 계획 라인"의 최대 개수이다. 오라클 디폴트 값 300.
개인 경험으로는 금융권 배치 튜닝시 실행 플랜이 대부분 300 라인수를 넘어서 v$sql_monitor로 조회시 SQL의 실행플랜
을 획득할수 없었다. 그래서 아래와 같이 세션에 한해 "실행 계획 라인"의 최대 개수를 조정하여 원하는 실행 플랜을 얻었다.
ALTER SESSION SET "_SQLMON_MAX_PLANLINES" = 1000;
2. 테스트 해보기
[ 실행 계획 라인 수 확인 ]
SELECT COUNT(*) FROM V$SQL_PLAN WHERE SQL_ID ='0hkm373ca6hsj';
[ 테스트 1 ]
- SQL 실행계획 : 226줄 / V$SQL_MONITOR 조회 됨
SELECT /*+ PARALLEL(2) Boty 1 */ -- 실행플랜 라인수 : 226, SQL_ID : 5q386yf972bn4
COUNT(*)
FROM DBA_OBJECTS A
, DBA_OBJECTS B
, DBA_OBJECTS C
WHERE A.OWNER = B.OWNER
AND A.OBJECT_NAME = B.OBJECT_NAME
AND A.OWNER = C.OWNER
AND A.OBJECT_NAME = C.OBJECT_NAME;
[ 테스트 2 ]
- SQL 실행계획 : 301줄 / V$SQL_MONITOR 조회 됨
SELECT /*+ PARALLEL(2) Boty 2 */-- 실행플랜 라인수 : 301, SQL_ID : 5h9cz6mxm5rfn
COUNT(*)
FROM DBA_OBJECTS A
, DBA_OBJECTS B
, DBA_OBJECTS C
, DBA_OBJECTS D
WHERE A.OWNER = B.OWNER
AND A.OBJECT_NAME = B.OBJECT_NAME
AND A.OWNER = C.OWNER
AND A.OBJECT_NAME = C.OBJECT_NAME
AND A.OWNER = D.OWNER
AND A.OBJECT_NAME = D.OBJECT_NAME;
[ 테스트 3 ]
- 실행계획 : 304줄 / V$SQL_MONITOR 조회 안됨
SELECT /*+ PARALLEL(2) Boty 3 */ -- 실행플랜 라인수 : 304, SQL_ID : 0hkm373ca6hsj
COUNT(*)
FROM DBA_OBJECTS A
, DBA_OBJECTS B
, DBA_OBJECTS C
, DBA_OBJECTS D
WHERE A.OWNER = B.OWNER
AND A.OBJECT_NAME = B.OBJECT_NAME
AND A.OWNER = C.OWNER
AND A.OBJECT_NAME = C.OBJECT_NAME
AND A.OWNER = D.OWNER
AND A.OBJECT_NAME = D.OBJECT_NAME
UNION ALL
SELECT COUNT(*) FROM DUAL
[ 테스트 결과 ]
- Boty 2는 301 라인임에도 불구하고 v$sql_monitor에 조회가 되었고, Boty 3은 304 라인이기 때문에 v$sql_monitor에 등록이
되지 못했다. 301이 왜 등록이 되었는지는 모르겠으나, 실행 플랜의 최상단 SELECT STATEMENT ID = 0 은 무시해서 그런것인
아닌지 결과론적으로 의심해본다. 302 라인수도 맞춰서 해보고 싶으나, 너무 지엽적인 내용이므로 패스!
넉넉하게 수치줘서 튜닝에 집중하면 된다.
SELECT SQL_TEXT, SQL_ID, A.*
FROM GV$SQL_MONITOR A
WHERE SQL_TEXT LIKE '%Boty%'
'ORACLE > SQL Tuning' 카테고리의 다른 글
성능 수치 단위 (0) | 2024.10.22 |
---|---|
사용자함수 ( 함수명, 서브쿼리변환, Deterministic, Result Cache ) 호출 결과 분석 (0) | 2024.10.15 |
LITERAL SQL 찾기 - 심화 (1) | 2024.10.01 |
like '%'|| :1 ||'%' 성능 개선 방법 고민 (2) | 2024.10.01 |
[ OZ Report ] Literal SQL 때려잡기 (2) | 2024.09.25 |