Oracle 11g 이상부터 Real-Time SQL Monitoring(v$sql_monitor, v$sql_plan_monitor) 기능을 사용할 수 있습니다. 

Oracle 11g에서 추가된 Real-Time SQL Monitoring 기능은 5초 이상인 모든 쿼리의 실행 이력 정보를 v$sql_monitor와 v$sql_plan_monitor 뷰에 남깁니다. 그리고 DBMS_SQLTUNE.REPORT_SQL_MONITOR 함수를 이용해서 정보를 조회 가능하도록 지원 됩니다. 


1. Pack 항목 확인


Oracle Diagnostic Pack

 - AWR

 - ADDM

 - ASH

 - Performance Tuning

 - Event notifications

 - Event history and metric history

 - Blackouts

 - Dynamic metric baselines

 - Monitoring templates

 - Memory-access based performance montoring

 

Tuning Pack

 - SQL Access Advisor

 - SQL Tuning Advisor

 - Automatic SQL Tuning

 - SQL Tuning Sets

 - SQL Monitoring

 - Reorganize objects


control_management_pack_access 파라미터는 3가지가 존재합니다. NONE은 Pack 두 가지 모두 사용하지 않겠다는 의미이며, DIAGNOSTIC은 oracle diagnostic pack만 사용 가능하며, DIAGOSTC+TUNING은 두 가지 Pack를 모두 사용 하게 됩니다.


SQL> SHOW PARAMETER statistics_level

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

statistics_level                     string      TYPICAL



SQL> SHOW PARAMETER control_management_pack_access

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_management_pack_access       string      DIAGNOSTIC+TUNING



2. HR 유저로 쿼리 수행

SQL> show user;

USER은 "HR"입니다

 

SQL>

SELECT    /*+ MONITOR */

 A.DEPARTMENT_ID, ROUND(AVG(A.SALARY),2) AS AVG_SALARY

FROM      EMPLOYEES A

,DEPARTMENTS B

WHERE     A.DEPARTMENT_ID = B.DEPARTMENT_ID

AND       B.LOCATION_ID = 1700

GROUP BY  A.DEPARTMENT_ID

;

 

DEPARTMENT_ID AVG_SALARY

------------- ----------

  10       4400

  30       4150

  90   19333.33

 100    8601.33

 110      10154

3. SYSTEM 유저로 HR 유저가 수행한 쿼리 모니터링


SQL> SELECT    SQL_ID, STATUS, SQL_TEXT

FROM      V$SQL_MONITOR

WHERE     USERNAME = 'HR'

/

 

SQL_ID        STATUS

------------- -------------------

SQL_TEXT

--------------------------------------------------------------------------------

g0md6v4p73kda DONE (ALL ROWS)

SELECT    /*+ MONITOR */

 A.DEPARTMENT_ID, ROUND(AVG(A.SALARY),2) AS AVG_SALARY

FROM      EMPLOYEES A

,DEPARTMENTS B

WHERE     A.DEPARTMENT_ID = B.DEPARTMENT_ID

AND       B.LOCATION_ID = 1700

GROUP BY  A.DEPARTMENT_ID



4. DBMS_SQLTUNE.REPORT_SQL_MONITOR 함수를 이용해서 HTML 리포트 파일 만들기

- 3번에서 조회 된 "g0md6v4p73kda" 값을 함수에 적용


SET LONG 1000000

SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
 
SPOOL report_sql_monitor.htm
SELECT DBMS_SQLTUNE.report_sql_monitor(
  sql_id       => 'g0md6v4p73kda',
  type         => 'HTML',
  report_level => 'ALL') AS report
FROM dual
/
SPOOL OFF


5. HTML 튜닝 리포트 확인





출처: http://estenpark.tistory.com/362 [전문가로가는길]

'ORACLE > 튜닝' 카테고리의 다른 글

HINT로 날개를 달자  (0) 2017.08.04
[Hint] SWAP_JOIN_INPUTS  (0) 2017.07.19
SPM(SQL PLAN MANAGEMENT) 사용 방법 #2  (0) 2017.06.15
SPM(SQL PLAN MANAGEMENT) 사용 방법 #1  (0) 2017.06.15
SQL 튜닝 - Query Block Name 사용  (0) 2017.06.15

+ Recent posts