본문 바로가기
IT/AWR-ASH

ASH 보고서란?: Oracle Database의 실시간 세션 활동을 분석하는 보고서

by free-inf 2025. 2. 9.

서버 이관 프로젝트를 수행하면서 가장 중요한 과제 중 하나는 데이터베이스의 성능을 안정적으로 유지하는 것이다. 특히, 시스템의 응답 시간이 느려지거나 성능이 저하되는 경우, 빠르게 원인을 분석하고 해결하는 것이 필수적이다.

 

Oracle 데이터베이스는 성능 모니터링과 튜닝을 위해 다양한 진단 도구를 제공하는데, 그중에서도 ASH(Active Session History) 보고서실시간 세션 활동을 분석하여 성능 문제를 진단하는 강력한 도구다.

 

ASH 보고서를 활용하면 특정 시점에 어떤 SQL이 실행되고 있었는지, 어떤 대기 이벤트(Wait Event)가 발생했는지, CPU와 I/O 사용률은 어떤 상태였는지 등의 상세한 정보를 확인할 수 있다. 이를 통해 데이터베이스의 성능 저하 원인을 신속하게 파악하고 효과적인 해결책을 마련할 수 있다.

 

본 글에서는 ASH 보고서의 개념, 주요 기능, 생성 방법, 활용 방안 및 성능 최적화 기법을 상세히 설명한다.


1. ASH(Active Session History)란?

1.1 ASH의 개념

ASH(Active Session History) 보고서는 Oracle 데이터베이스에서 현재 활성화된 세션의 성능 데이터를 실시간으로 수집하는 기능이다.

Oracle은 매 초마다 현재 실행 중인 세션들의 성능 정보를 메모리에 저장하며, 이를 통해 세션 상태, 실행 중인 SQL, 대기 이벤트, 자원 사용량 등을 추적할 수 있다.

이러한 데이터를 기반으로 DB 성능 저하 원인을 신속히 파악하고, 튜닝 작업을 수행할 수 있도록 도와주는 핵심 보고서가 ASH 보고서다.

1.2 AWR과 ASH의 차이점

Oracle 데이터베이스는 ASH 외에도 AWR(Automatic Workload Repository)이라는 보고서를 제공한다. 두 개의 보고서는 유사한 역할을 수행하지만, 수집 방식과 목적이 다르다.

항목ASH 보고서AWR 보고서

수집 주기 1초마다 샘플링 1시간 단위로 스냅샷 저장
저장 위치 메모리 데이터베이스 테이블
분석 대상 실시간 세션 활동 장기적인 성능 데이터
활용 목적 실시간 문제 진단 장기적인 성능 튜닝

즉, ASH는 실시간 분석에 초점을 맞춘 도구이며, AWR은 장기적인 성능 분석트렌드 모니터링에 유용하다.


2. ASH 보고서의 주요 기능

2.1 실시간 세션 모니터링

ASH는 현재 실행 중인 SQL과 해당 세션이 소비하는 자원을 추적하여 성능 저하 원인을 빠르게 분석할 수 있도록 도와준다.

2.2 대기 이벤트(Wait Event) 분석

SQL 실행이 지연되는 주요 원인 중 하나는 **대기 이벤트(Wait Event)**다. ASH를 통해 CPU 대기, I/O 대기, 록(Lock) 대기, 네트워크 대기 등의 문제를 실시간으로 확인하고, 성능 튜닝을 수행할 수 있다.

2.3 특정 SQL 성능 분석

데이터베이스 성능을 저하시킬 수 있는 비효율적인 SQL을 식별하고 최적화할 수 있다. 예를 들어, Full Table Scan이 발생하는 SQL을 찾아 인덱스 적용 여부를 확인하고, 실행 계획을 개선할 수 있다.

2.4 세션별 CPU 및 메모리 사용량 분석

데이터베이스에서 특정 세션이 과도한 리소스를 사용하는지 확인하고, 필요하면 해당 세션을 종료(KILL)하거나 SQL을 최적화할 수 있다.


3. ASH 보고서 생성 방법

3.1 기본적인 ASH 보고서 생성 SQL

ASH 보고서는 SQL을 실행하여 생성할 수 있다.

@$ORACLE_HOME/rdbms/admin/ashrpt.sql

실행 후 보고서 유형(HTML 또는 TEXT) 을 선택하고, 분석할 시간 범위를 입력하면 된다.

3.2 특정 SQL에 대한 ASH 데이터 조회

SELECT sample_time, sql_id, session_id, wait_class, event 
FROM v$active_session_history 
WHERE sql_id = 'SQL_ID';

위 쿼리를 실행하면 특정 SQL이 실행되었을 때 발생한 대기 이벤트리소스 사용 내역을 확인할 수 있다.

3.3 특정 세션의 활동 내역 조회

SELECT sample_time, session_id, session_state, wait_class, event 
FROM v$active_session_history 
WHERE session_id = 1234;
 

이 쿼리를 실행하면 특정 세션이 어떤 대기 이벤트를 경험했는지 확인할 수 있다.


4. ASH 보고서를 활용한 성능 분석 방법

4.1 CPU 사용량이 높은 SQL 찾기

SELECT sql_id, COUNT(*) AS cpu_usage 
FROM v$active_session_history 
WHERE session_state = 'ON CPU' 
GROUP BY sql_id 
ORDER BY cpu_usage DESC;
  • CPU를 많이 사용하는 SQL을 찾고 튜닝을 통해 최적화할 수 있다.

4.2 I/O 대기 시간이 긴 SQL 분석

SELECT sql_id, COUNT(*) AS io_waits 
FROM v$active_session_history 
WHERE wait_class = 'User I/O' 
GROUP BY sql_id 
ORDER BY io_waits DESC;
  • 디스크 읽기/쓰기로 인해 실행 속도가 느려지는 SQL을 식별하여 인덱스 튜닝 또는 테이블 파티셔닝을 고려할 수 있다.

4.3 블로킹 세션(Blocking Session) 감지

SELECT blocking_session, session_id, event, wait_time 
FROM v$active_session_history 
WHERE session_state = 'WAITING' 
AND blocking_session IS NOT NULL;
  • 다른 세션을 차단하는 블로킹 세션을 감지하여 트랜잭션 록 문제를 해결할 수 있다.

 ASH 보고서는 실시간 데이터베이스 성능 분석 및 문제 해결에 필수적인 도구다. 이를 활용하면 실행 중인 SQL과 대기 이벤트를 실시간으로 분석하고, 성능 저하의 원인을 신속하게 파악할 수 있다.

 

서버 이관 후 성능을 최적화하고 안정적인 운영 환경을 유지하기 위해, ASH 보고서를 적극적으로 활용할 필요가 있다. 이를 통해 데이터베이스 성능을 최적화하고, 시스템 운영의 효율성을 극대화할 수 있을 것이다.