메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Oracle Real-time SQL Monitoring (오라클 실시간 SQL 모니터링)

    Oracle Real-time SQL Monitoring은 SQL 쿼리 실행 중 성능을 실시간으로 모니터링하고 분석하는 강력한 도구
  • 주요 기능 및 특징
    • 실시간 모니터링 : 쿼리가 실행되는 동안 진행 상태와 각 단계의 성능 지표를 실시간으로 확인.
    • 세부 실행 계획 : 전체 쿼리 실행 계획뿐만 아니라, 각 오퍼레이션(테이블 스캔, 조인 등)이 얼마나 많은 행을 처리하고 어떤 자원을 사용했는지 정확한 데이터를 제공.
    • 자원 사용량 분석 : CPU, I/O, 메모리 사용량, 대기 이벤트(wait events)를 실시간으로 추적하여 병목 현상의 원인을 쉽게 찾을 수 있음.
    • 자동 활성화 : 기본적으로 실행 시간이 길거나 병렬로 실행되는 SQL 쿼리는 자동으로 모니터링 대상이 됩니다. `_sqlmon_threshold` 파라미터로 제어.
    복잡하고 시간이 오래 걸리는 쿼리의 실행 계획, I/O, CPU, 대기 시간 등 상세한 성능 지표를 즉각적으로 보여주어 성능 문제를 신속하게 파악하고 해결


사용 방법

  • Real-time SQL Monitoring은 주로 AWR(Automatic Workload Repository) 리포트나 SQL Developer와 같은 GUI 도구를 통해 사용합니다.

방법1) SQL Developer/SQL Developer Web 사용

  1. SQL Developer에 접속하여 원하는 SQL 쿼리를 실행.
  2. 쿼리가 실행되는 동안 'SQL Monitor' 탭에서 실시간으로 성능을 모니터링할 수 있습니다.
  3. 쿼리가 완료되면 'Summary', 'Plan Statistics', 'Activity' 등 다양한 탭을 통해 상세 분석 리포트를 확인할 수 있습니다.

방법2) SQLplus/오렌지/토드/SQL Developer Web에서 수동으로 리포트 생성

  • SQL 쿼리 ID(SQL_ID)를 사용하여 SQL Monitoring 리포트를 수동으로 생성할 수 있습니다.
  • 이는 자동 모니터링 대상이 아닌 짧은 쿼리나 특정 쿼리의 성능을 분석할 때 유용합니다.
  1. 모니터링 대상 SQL_ID 찾기
    SELECT SQL_ID FROM V$SQL WHERE sql_text LIKE '%YOUR_QUERY_TEXT%';
  2. SQL Monitoring 리포트 생성
    • DBMS_SQLTUNE.REPORT_SQL_MONITOR 함수를 사용합니다.
        -- HTML 형식의 리포트 생성
        -- SET LONG 2000000
        -- SET PAGESIZE 1000
        -- SET LINESIZE 250
        SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => 'YOUR_SQL_ID') FROM DUAL;
        -- TXT 형식의 리포트 생성
        SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
            sql_id => 'YOUR_SQL_ID',
            type => 'TEXT',
            report_level => 'ALL') FROM DUAL;
    • sql_id : 모니터링할 쿼리의 고유 ID입니다.
    • type : 리포트의 형식을 지정합니다 (`HTML`, `TEXT`, `XML`). `HTML`이 가장 시각적으로 보기 좋습니다.
    • report_level: 리포트의 상세 수준을 지정합니다 (`BASIC`, `TYPICAL`, `ALL`). `ALL`을 사용하면 가장 상세한 정보를 얻을 수 있습니다.
    • html 타입 예시
      • sqlmonhtmlpng.png

방법3) /*+ MONITOR */ SQL 힌트 사용

  • 특정 쿼리를 강제로 모니터링 대상에 포함시키려면 `MONITOR` 힌트를 사용합니다.
SELECT /*+ MONITOR */ * FROM employees WHERE hire_date < SYSDATE;


  • 참고 : Real-time SQL Monitoring은 Oracle Enterprise Edition에서만 제공되는 기능이며, Diagnostics Pack 라이선스가 필요합니다.