ASH Report For DB NAME/INSTANCE NAME

  • ASH 보고서가 생성된 DB 정보 및 사용된 샘플의 기본 정보를 보여준다.

Top User Events

  • 서버 프로세스가 발생시킨 대기 이벤트 통계를 보여준다.
  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY 에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 이벤트 발생 비율 1%이상
    • 이벤트 발생 비율 상위 5개 이벤트
  • 보고서 정렬 순서
    • 이벤트 발생량으로 내림차순 정렬
    • 이벤트 이름으로 오름차순 정렬
    • 이벤트 클래스 이름으로 오름차순 정렬
  • 문제 구간에서 집중적으로 발생한 대기 이벤트를 확인하고, 이를 토대로 문제 원인을 파악하기 시작 할 수 있다.
    • 예) enq:TX-row lock contention 대기이벤트 비중이 96.24% -> Top SQL Statements에서 경합이 발생한 SQL 추출, Top BLocking Session 에서 대기를 유발시킨 세션 정보 파악

Top Background Events

  • 백그라운드 프로세스가 발생시킨 대기 이벤트 통계를 보여준다.

Top Event P1/P2/P3 Values

  • 이벤트 파라메터 값을 보여준다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY 에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 이벤트 발생 비율 1%이상
    • 이벤트 발생 비율 상위 5개 이벤트
    • 각 이벤트 마다 동일 이벤트의 P1,P2,P3 파라미터 값별 발생 비율 상위3개
    • 동일 이벤트의 P1,P2,P3 파라미터 값별 발생 비율이 1%이상이거나 발생 비율 상위 1개
    • P1,P2,P3 값중 하나라도 존재해야만 보고서에 기록된다.
    • ( page 297페이지 그림 참조 )
  • 보고서 정렬 순서
    • 이벤트 발생량으로 내림차순 정렬
    • 개별 이벤트 발생량으로 내림차순 정렬
    • P1,P2,P3 값으로 오름차순 정렬
  • 특정 자원에서 경합이 발생하여 성능이 저하되는 경우에 이를 파악하는데 유용한 보고서
    • 예) enq:TM-contention 대기이벤트에서 P1, P2값으로 락 이름과 모드및 락을 획득하고자 하는 오브젝트를 파악할 수 있다. ( page 298 )

Top Service/Module

  • 서비스별, 모듈별, 액션별 부하 발생량의 비율을 보여준다. 문제 SQL를 수행하는 어플리케이션 파악에 용이하며, 업무별 부하 분석 및 장애 처리등에도 유용하다.
  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY, V$ACTIVE_SERVICE UNION ALL DBA_HIST_SERVICE_NAME에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 동일 서비스의 모듈별 발생 비율 1% 이상
    • 동일 서비스의 모듈별 발생 비율 상위 5개 이벤트
    • 동일 서비스의 모듈마다 동일 서비스,모듈의 액션별 발생 비율 상위 3개
    • 동일 서비스의 모듈의 액션별 발생 비율이 1% 이상이거나 발생 비율 상위 1개
    • V$ACTIVE_SESSION_HISTORY, DBA_HIST_ACTIVE_SESS_HISTORY의 SERVICE_HASH값이 0이 아닌것
  • 보고서 정렬 순서
    • 동일 서비스의 모듈별 발생 비율 내림차춘 정렬
    • 모듈명으로 오름차순 정렬
    • 동일 서비스, 모듈의 액션별 발생 비율 내림차순 정렬
    • 액션명으로 오름차순 정렬
  • DBMS_APPLICATION_INFO패키지를 이용하여 세션마다 모듈별 액션 정보를 설정해 주어야 어플리케이션의 속성별 모니터링이 가능하다. ( 설정하지 않은 경우 UNMAMED로 표시 )

EXEC DBMS_APPLICATION_INFO.SET_MODULE( MODULE_NAME => 'ADMIN_MONITOR', ACTION_NAME => 'SELECT V$SESSION' );

Client IDs

  • 클라이언트별 발생 부하 비율을 파악하는데 유용하다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY, V$ACTIVE_SERVICE UNION ALL DBA_HIST_SERVICE_NAME에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 클라이언트 ID, 유저 ID, 프로그램, 서비스별 발생 비율이 1% 이상
    • 클라이언트 ID, 유저 ID, 프로그램, 서비스별 발생 비율 상위 5개
    • V$ACTIVE_SESSION_HISTORY, DBA_HIST_ACTIVE_SESS_HISTORY의 CLIENT_ID값이 NULL이 아닌 것
  • 보고서 정렬 순서
    • 클라이언트 ID, 유저 ID, 프로그램, 서비스별 발생 비율 내림차순 정렬
    • 클라이언트 ID로 오름차순 정렬
    • 유저 ID로 오름차순 정렬
    • 프로그램 이름으로 오름차순 정렬
  • DBMS_SESSION 패키지를 이용하여 CLIENT_ID를 설정할 수 있다.

EXEC DBMS_SESSION.SET_IDENTIFIED( 'HR0815' );

Top SQL Command Types

  • SQL 종류별 부하 발생 비율을 파악할 수 있다.


  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • SQL 종류별 발생 비율 1% 이상
    • SQL 종류별 발생 비율 상위 5개 이벤트
  • 보고서 정렬 순서
    • SQL 종류별 발생 비율 내림차순 정렬

Top SQL Statements

  • 경합을 발생시킨 개별 SQL정보를 파악할 수 있다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 동일한 SQL ID, 실행계획을 가지는 SQL부하 발생 비율이 1% 이상
    • 동일한 SQL ID, 실행계획을 가지는 SQL부하 발생 비율 상위 5개 SQL
    • 동일한 SQL ID, 실행계획을 가지는 SQL마다 이벤트 발생 비율 상위 3개
    • 동일한 SQL ID, 실행계획을 가지는 SQL의 이벤트 발생 비율이 1% 이상이거나 발생 비율 상위 1개
    • SQL ID가 NULL이 아닌 것
  • 보고서 정렬 순서
    • 동일한 SQL ID, 실행계획을 가지는 SQL부하 발생 비율 내림차순 정렬
    • SQL ID 오름차순 정렬
    • 실행 계획 해시 값 오름차순 정렬
    • 동일한 SQL ID, 실행계획을 가지는 SQL이 발생시키는 대기 이벤트 발생 비율 내림차순 정렬
    • 이벤트 이름 오름차순 정렬

Top SQL using literals

  • 비공유 SQL중 부하를 많이 차지하는 SQL를 기록하여 비공유 SQL를 찾는것을 도와준다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY, V$SQLSTATS UNION ALL DBA_HIST_SQLSTAT 에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 동일 실행 계획을 가지는 SQL들이 발생시킨 부하 비율이 1% 이상
    • 동일 실행 계획을 가지는 SQL들이 발생시킨 부하 비율 상위 5개
    • 동일 실행 계획을 가지는 SQL의 개수 4개 이상
    • SQL_PLAN_HASH_VALUE가 0이 아닌 것
  • 보고서 정렬 순서
    • 동일 실행 계획을 가지는 SQL의 개수 내림차순 정렬
    • PLAN HASH 값 오름차순 정렬
  • INSERT문은 PLAN_HASH_VALUE가 0이며, 보고서에 기록되지 않는다.

Top PL/SQL Procedures

  • 부하 PL/SQL을 파악하는데 유용하다.
  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • PL/SQL 프로시저의 부하 비율이 1% 이상
    • PL/SQL 프로시저의 부하 비율 상위 5개
    • PL/SQL 프로시저마다 수행한 작업이 차지하는 부하 상위 3개
    • PL/SQL 프로시저가 수행한 작업 부하가 1% 이상이거나 부하 발생 비율 상위 1개
    • PLSQL_ENTRY_OBJECT_ID 값이 NULL이 아닌 것
  • 보고서 정렬 순서
    • PL/SQL 프로시저의 부하 비율 내림차순
    • PL/SQL 수행한 작업 부하 내림차순
  • PL/SQL 소스 코드 확인

SELECT TEXT FROM DBA_SOURCE WHERE OWNER = :OWNER AND NAME = :OBJ_NAME ORDER BY LINE;

Top Sessions

  • 가장 많은 부하를 발생시킨 세션 및 해당 세션이 발생시킨 이벤트 비율을 파악할 수 있다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 세션, 시리얼 번호, 유저, 프로그램별 부하 발생 비율이 1% 이상
    • 세션, 시리얼 번호, 유저, 프로그램별 부하 발생 비율 상위 5개
    • 세션마다 세션, 시리얼 번호, 유저, 프로그램별 발생시킨 이벤트가 차지하는 비율 상위 3개
    • 세션, 시리얼 번호, 유저, 프로그램별 발생시킨 이벤트가 차지하는 비율 상위 1개이거나 1%넘은 것
  • 보고서 정렬 순서
    • 세션, 시리얼 번호, 유저, 프로그램별 부하 발생 비율 내림차순 정렬
    • 세션, 시리얼 번호 오름차순 정렬
    • 유저 ID 오름차순 정렬
    • 프로그램명 오름차순 정렬
    • 세션, 시리얼 번호, 유저, 프로그램별 발생시킨 이벤트가 차지하는 비율 내림차순 정렬
    • 이벤트명 오름차순 정렬
  • 구간별 부하 발생 세션 검색 SQL

	SELECT * 
	    FROM (
				SELECT  SESSION_ID , SESSION_SERAIL# 
				              ,SQL_ID ,SQL_PLAN_HASH_VALUE 
				              ,TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS') DT
				   FROM  V$ACTIVE_SESSION_HISTORY 
				WHERE  SESSION_ID = :SID
				       AND  SESSION_SERIAL# = :SERIAL
				      AND  SAMPLE_TIME BETWEEN :BTIME AND :ETIME
				UNION ALL
				SELECT  SESSION_ID , SESSION_SERAIL# 
				              ,SQL_ID ,SQL_PLAN_HASH_VALUE 
				              ,TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS') DT
			       FROM  DBA_HIST_ACTIVE_SESS_HISTORY
			     WHERE  SESSION_ID = :SID
				     AND  SESSION_SERIAL# = :SERIAL
				    AND SAMPLE_TIME BETWEEN :BTIME AND :ETIME
			    )
ORDER BY SESSION_ID  ,SESSION_SERAIL# ,DT

Top Blocking Sessions

  • 경합을 유발하는 세션 정보를 파악할 수 있다.
  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 대기 유발 세션에 의해 대기한 세션들이 발생시킨 부하 비율이 1% 이상
    • 대기 유발 세션에 의해 대기한 세션들이 발생시킨 부하 비율 상위 5개
    • 같은 대기 유발 세션에 의해 대기한 세션들이 발생시킨 이벤트 발생 비율이 상위 3개
    • 같은 대기 유발 세션에 의해 대기한 세션들이 발생시킨 이벤트 발생 비율 상위 1개이거나 1% 넘은 것
  • 보고서 정렬 순서
    • 대기 유발 세션에 의해 대기한 세션들이 발생시킨 부하 비율 내림차순 정렬
    • 대기 유발 세션ID, 시리얼 번호 오름차순 정렬
    • 같은 대기 유발 세션에 의해 대기한 세션들이 발생시킨 이벤트 발생 비율 내림차순 정렬
    • 이벤트 이름 오름차순 정렬
  • 경합 해결 방법
    • 경합 유발 세션 KILL : 가장 많이 고려할 수 있는 방법으로 문제 원인 파악을 자세히 할 시간이 없거나 데드락이 발생한 경우 선택할 수 있다.
    • SQL 튜닝 : 무거운 SQL이 수행되면서 데이터베이스 자원을 과도하게 사용하여 다른 세션들에 경합을 유발하는 경우로 세션을 KILL 후에도 문제 SQL이 수행되면 다시 경합을 유발시킨다.
    • 어플리케이션 튜닝 : 어플리케이션 로직 상 데이터 사용에 경합을 유발시키는 경우로 세션을 KILL 후에도 어플리케이션이 수행되면 다시 경합을 유발시킨다.

Top Session running PQs

  • 병렬 SQL의 부하 정보를 보여주며, DBA는 이를 보고 배치 작업 수행 시간 조정 여부를 판단 할 수 있다.
  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 병럴 SQL이 수행 SQL에서 차지하는 부하 비율(% Activity)이 1%이상
    • 병럴 SQL이 수행 SQL에서 차지하는 부하 비율 상하 5개
    • 같은 병렬 SQL이 수행 SQL에서 발생시킨 이벤트가 차지하는 비율이 상위 3개
    • 같은 병렬 SQL이 수행 SQL에서 발생시킨 이벤트가 차지하는 비율이 상위 1개이거나 1% 넘은 것
  • 보고서 정렬 순서
    • 병렬 SQL이 수행SQL에서 차지하는 부하 비율(% Activity) 내림차순 정렬
    • 쿼리 코디네이터 ID, 인스턴스 ID 오름차순 정렬
    • 같은 병렬 SQL이 수행SDQL에서 발생시킨 이벤트가 차지하는 비율 내림차순 정렬
    • SQL ID 오름차순 정렬
    • 이벤트 이름 오름차순 정렬

Top DB Objects

  • 핫 오브젝트 및 오브젝트에 발생한 대기 이벤트를 파악할 수 있다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY, SYS_OBJECTS, DBA_OBJECTS, DBA_HIST_SEG_STAT 에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 오브젝트에 발생한 부하 비율(% Activity)이 1% 이상
    • 오브젝트에 발생한 부하 비율 상위 5개
    • 동일 오브젝트에 발생한 이벤트가 차지하는 비율 상위 3개
    • 동일 오브젝트에 발생한 이벤트가 차지하는 비율 상위 1개이거나 1% 넘은것
    • 이벤트 클래스가 Application , Cluster, User I/O 이거나 이벤트 명이 'buffer busy waits'인 이벤트
    • A.CURRENT_OBJ#이 0보다 큰 오브젝트
  • 보고서 정렬 순서
    • 오브젝트에 발생한 부하 비율(% Activity) 내림차순 정렬
    • 오브젝트 ID값 오름차순 정렬
    • 오브젝트에 발생한 이벤트 비율 내림차순 정렬
    • 이벤트 이름 오름차순 정렬

Top DB Files

  • I/O가 집중되는 파일이 존재하는지 파악할 수 있다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY, DBA_HIST_DATAFILE에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 파일에 발생한 부하 비율(% Activity)이 1% 이상
    • 파일에 발생한 부하 비율 상위 5개
    • 동일 파일에 발생한 이벤트가 차지하는 비율 상위 3개
    • 동일 파일에 발생한 이벤트가 차지하는 비율 상위 1개이거나 1% 넘은것
    • 이벤트 클래스가 Cluster, User I/O인 이벤트
    • A.CURRENT_FILE#이 0보다 큰 파일
  • 보고서 정렬 순서
    • 파일에 발생한 부하 비율(% Activity) 내림차순 정렬
    • 파일 ID값 오름차순 정렬
    • 파일에 발생한 이벤트 비율 내림차순 정렬
    • 이벤트 이름 오름차순 정렬

Top Latches

  • 래치 경합을 유발하는 세션 ID 및 대기 시간 정보를 보여준다.

  • V$ACTIVE_SESSION_HISTORY UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY에서 데이터를 추출한다.
  • 보고서에 기록되는 기준
    • 래치 대기 이벤트 부하 비율(% Latch)이 1% 이상
    • 래치 대기 이벤트 부하 비율 상위 5개
    • 같은 대기 유발 세션에 의해 동일한 래치 획득 대기 이벤트가 발생한 비율 상위 3개
    • 같은 대기 유발 세션에 의해 동일한 래치 획득 대기 이벤트가 발생한 비율 상위 1개이거나 1% 넘은 것
    • 이벤트 이름이 'latch:'로 시작하거나 'latch free'인 이벤트
  • 보고서 정렬 순서
    • 래치 대기 이벤트 부하 비율(% Latch) 내림차순 정렬
    • 같은 대기 유발 세션에 의해 동일한 래치 획득 대기 이벤트가 발생한 비율 내림차순 정렬
    • 대기 유발 세션 ID 오름차순 정렬
    • 대기 유발 세션 시리얼 번호 오름차순 정렬

Activity Over Time

  • 시간대별 대기 이벤트 발생 현황을 파악할 수 있다.
  • 최소 1초 단위로 시간 지정할 수 있기 떄문에 문제 발생 구간을 정확히 파악할 수 있다.
  • 보통 ASH 보고서는 부하 비율이 일정 조건 이상 충족되어야 ASH보고서에 기록되므로, 생성 범위를 너무 넒게 설정하여 각 단위 보고서에 문제 원인이 기록되지 않을 수 있다.
  • Activity Over Time 보고서를 참조하여 문제가 발생한 정확한 구간으로 보고서 생성 범위를 축소할 수 있다.

  • V$ACTIVE_SESSION_HISTORY(1분단위) UNION ALL DBA_HIST_ACTIVE_SESS_HISTORY(5분단위)에서 데이터를 추출한다.
  • ashrpti.sql를 사용한 ASH보고서를 생성할때는 지정한 값만큼의 초 단위로 구분하여 보여준다.
  • 보고서에 기록되는 기준
    • 설정된 시간 구간에서 이벤트 발생 비율 상위 3개
  • 보고서 정렬 순서
    • 시간 순 오름차순 정렬
    • 설정된 시간 구간에서 이벤트 발생 비중 내림차순 정렬