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개 이벤트
- 보고서 정렬 순서
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개
- 보고서 정렬 순서
- 시간 순 오름차순 정렬
- 설정된 시간 구간에서 이벤트 발생 비중 내림차순 정렬