DATA 전문가로 가는 길

[Oracle] Oracle Real-Time SQL Monitoring(쿼리 모니터링) 본문

Data Architecture/Tunning

[Oracle] Oracle Real-Time SQL Monitoring(쿼리 모니터링)

EstenPark 2017. 1. 13. 15:09

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 튜닝 리포트 확인






Comments