SQL Monitor 보고서 확인(실행 중이거나 완료된 장시간 SQL)
Oracle성능명령어
-- List monitored SQL (longer than 5 s, parallel, or /*+ MONITOR */):
SELECT sql_id, status, username, sql_exec_id,
TO_CHAR(sql_exec_start,'YYYY-MM-DD HH24:MI:SS') AS exec_start,
ROUND(elapsed_time/1e6,1) AS elapsed_s,
ROUND(cpu_time/1e6,1) AS cpu_s,
buffer_gets, px_servers_allocated
FROM v$sql_monitor
ORDER BY sql_exec_start DESC
FETCH FIRST 20 ROWS ONLY;
-- TEXT report (actual rows, time and activity per plan line):
SET LONG 10000000 LONGCHUNKSIZE 10000000 LINESIZE 300 PAGESIZE 0 TRIMSPOOL ON
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id => '<sql_id>',
type => 'TEXT',
report_level => 'ALL') AS report
FROM dual;
-- Shareable HTML (interactive in a browser):
SPOOL /tmp/sqlmon_<sql_id>.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id => '<sql_id>', type => 'ACTIVE', report_level => 'ALL')
FROM dual;
SPOOL OFF하는 일
Real-Time SQL Monitoring은 장시간 또는 병렬 SQL 실행 계획의 각 단계별 실제 행 수, 경과 시간, 메모리/temp 사용량, ASH 활동을 보여 준다. SQL이 실행 중일 때도 진행 상황을 볼 수 있다.
사용 시점
배치/보고서 쿼리가 멈췄는지와 남은 양을 확인할 때, 병렬 쿼리 분산(PX skew) 분석, 추정 행(E-Rows)과 실제 행의 차이를 찾을 때.
주의
Tuning Pack 라이선스가 필요하다(Diagnostics Pack이 전제 조건). 기본적으로 CPU/I-O를 5 s 소비하거나 병렬로 실행되는 SQL만 모니터링된다. 그 외에는 /*+ MONITOR */ 힌트를 사용한다. 매우 큰 계획(_sqlmon_max_planlines, 기본값 300)은 모니터링되지 않는다. 항목은 제한된 시간 동안만 메모리에 남으며, 12c+에서는 이전 보고서를 DBA_HIST_REPORTS에서도 볼 수 있다.