본문 바로가기
IT/AWR-ASH

ASH 보고서에서 Wait Event 분석하기: 가장 많이 발생하는 대기 이벤트를 식별하는 방법.

by free-inf 2025. 2. 9.

서버 이관 프로젝트를 수행하는 과정에서 데이터베이스 성능을 안정적으로 유지하는 것은 가장 중요한 과제 중 하나다. 새로운 환경으로 서버를 이전하면, 기존과는 다른 성능 병목이 발생할 수 있으며, 예상치 못한 쿼리 실행 지연이나 시스템 부하 증가가 발생할 가능성이 높다. 이러한 성능 저하 문제를 신속하게 진단하고 해결하기 위해 ASH(Active Session History) 보고서를 활용하는 것이 필수적이다.

 

특히, SQL 실행이 지연되는 원인을 분석하는 데 있어 대기 이벤트(Wait Event) 분석은 핵심적인 역할을 한다. Wait Event는 SQL이 실행되는 동안 특정 자원을 기다리면서 발생하는 지연 요소를 의미하며, ASH 보고서를 활용하면 가장 많이 발생하는 대기 이벤트를 식별할 수 있다. 이를 통해 CPU, 디스크 I/O, 네트워크, 트랜잭션 락(Lock) 등 다양한 자원 중 어떤 부분이 성능 저하의 원인인지 파악할 수 있다.

 

본 글에서는 ASH 보고서를 기반으로 Wait Event를 분석하는 방법과 주요 대기 이벤트 유형을 설명하고, SQL 명령어를 활용하여 성능 최적화 방안을 도출하는 실무적인 접근법을 소개한다. 이를 통해 서버 이관 후 성능 문제를 효과적으로 진단하고 해결할 수 있도록 한다.


1. ASH 보고서에서 Wait Event 분석이 중요한 이유

1.1 Wait Event란?

Wait Event는 SQL이 실행되는 동안 특정 자원(예: CPU, 디스크, 메모리, 락 등)을 기다리는 시간을 의미한다. SQL 실행이 원활하게 진행되지 않고 대기 상태가 길어질수록, 전체적인 응답 시간이 증가하며 데이터베이스 성능 저하로 이어질 수 있다.

Oracle 데이터베이스는 이러한 대기 이벤트를 자동으로 기록하며, ASH 보고서를 활용하면 특정 SQL이 어떤 이유로 실행 속도가 느려졌는지 분석할 수 있다.

1.2 Wait Event 분석의 필요성

  • 성능 저하 원인 파악: 특정 SQL이 느리게 실행되는 이유를 정확히 진단할 수 있다.
  • 리소스 경합 분석: CPU, I/O, 락 등 어떤 요소가 병목을 유발하는지 식별할 수 있다.
  • SQL 튜닝 방향 설정: Wait Event 데이터를 기반으로 인덱스 최적화, 실행 계획 변경, 트랜잭션 조정 등의 최적화 방안을 수립할 수 있다.

2. ASH 보고서를 활용한 Wait Event 분석 방법

ASH 보고서를 활용하여 Wait Event를 분석하는 과정은 다음과 같다.

2.1 ASH 보고서 생성 방법

ASH 보고서를 생성하려면 다음 명령어를 실행한다.

@$ORACLE_HOME/rdbms/admin/ashrpt.sql

이 명령을 실행하면 보고서 형식(HTML 또는 TEXT), 분석할 시간 범위, 저장 경로 등을 입력해야 한다.

생성된 보고서를 확인하면, 특정 시간 동안 어떤 대기 이벤트가 가장 많이 발생했는지 분석할 수 있다.


2.2 SQL을 이용한 Wait Event 조회

ASH 보고서를 활용하여 Wait Event를 직접 조회하고 분석하는 방법도 있다.

가장 많이 발생한 Wait Event 조회

아래 SQL을 실행하면 특정 시간 동안 가장 많이 발생한 대기 이벤트 목록을 확인할 수 있다.

 
SELECT event, COUNT(*) AS wait_count
FROM v$active_session_history
WHERE sample_time BETWEEN TO_DATE('2024-02-07 10:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2024-02-07 10:30:00', 'YYYY-MM-DD HH24:MI:SS')
GROUP BY event ORDER BY wait_count DESC;
  • event: 발생한 대기 이벤트 이름.
  • wait_count: 해당 이벤트가 발생한 횟수.

이 데이터를 활용하면 특정 시간대에 어떤 대기 이벤트가 집중적으로 발생했는지를 분석할 수 있다.


2.3 특정 SQL의 Wait Event 분석

아래 SQL을 실행하면 특정 SQL이 어떤 대기 이벤트로 인해 실행이 지연되었는지를 확인할 수 있다.

 
SELECT sql_id, event, COUNT(*) AS wait_count
FROM v$active_session_history
WHERE sql_id = 'SQL_ID'
GROUP BY sql_id, event ORDER BY wait_count DESC;
  • 특정 SQL이 CPU, 디스크 I/O, 락 등 어떤 대기 이벤트로 인해 성능 저하를 겪고 있는지를 분석할 수 있다.

이 데이터를 활용하면 문제가 발생한 SQL을 최적화하는 방향을 설정할 수 있다.


3. 주요 대기 이벤트 유형과 해결 방법

Wait Event는 크게 CPU 대기, I/O 대기, 락(Lock) 대기, 네트워크 대기 등으로 분류할 수 있으며, 각각의 원인과 해결 방안이 다르다.

대기 이벤트 유형설명해결 방법

CPU 대기 (on CPU) SQL이 실행 중 CPU를 과도하게 사용하여 대기 발생 실행 계획 분석 및 인덱스 최적화
log file sync 트랜잭션 로그를 디스크에 기록하는 동안 대기 발생 COMMIT 빈도 조정 및 REDO 로그 튜닝
db file sequential read 인덱스를 사용하여 데이터를 읽지만 I/O 지연 발생 디스크 I/O 분산 및 테이블 파티셔닝 적용
enq: TX - row lock contention 여러 트랜잭션이 동일한 데이터에 접근할 때 발생 트랜잭션 크기 축소 및 인덱스 추가
SQL*Net message from client 클라이언트와의 네트워크 대기 시간이 길어질 때 발생 네트워크 성능 모니터링 및 데이터 압축 적용

이러한 Wait Event를 분석하면 SQL 성능 문제의 근본적인 원인을 파악하고, 효율적인 최적화 전략을 수립할 수 있다.


 

ASH 보고서는 SQL 실행 중 발생하는 대기 이벤트를 실시간으로 분석하여 성능 저하의 원인을 파악하는 강력한 도구다. 특히, Wait Event 분석을 통해 CPU, 디스크 I/O, 락, 네트워크 등의 자원 중 어떤 부분이 병목을 유발하는지를 정확히 식별할 수 있다.

 

ASH 보고서를 활용하여 대기 이벤트가 집중적으로 발생하는 SQL을 찾아 최적화하고, 시스템 자원 사용을 효율적으로 관리하면 서버 이관 후 성능 문제를 신속하게 해결할 수 있다.