본문 바로가기
IT/AWR-ASH

ASH를 이용한 장기적인 성능 트렌드 분석: 장기적인 관점에서 데이터베이스 성능을 모니터링.

by free-inf 2025. 2. 21.

서버 이관 프로젝트를 수행하는 과정에서 데이터베이스의 성능을 지속적으로 모니터링하고 최적화하는 것은 매우 중요한 작업이다. 새로운 서버 환경에서는 CPU 사용량, 디스크 I/O, 트랜잭션 처리 속도, 대기 이벤트 등의 패턴이 기존 환경과 다를 수 있으며, 예상치 못한 성능 변화가 발생할 가능성이 높다.

 

이러한 변화를 조기에 감지하고 효과적으로 대응하기 위해서는 장기적인 성능 트렌드를 분석할 수 있는 체계적인 모니터링 방법이 필요하다. Oracle의 ASH(Active Session History) 데이터는 초 단위로 활성 세션 정보를 수집하여, 데이터베이스의 성능을 장기적으로 분석하는 데 유용한 도구가 될 수 있다.

 

ASH 데이터를 활용하면 시간의 흐름에 따라 발생하는 성능 변화를 확인하고, 특정 시간대에 성능 저하가 발생하는 원인을 분석할 수 있다. 이를 통해 서버 이관 후 성능 최적화를 위한 방향성을 설정하고, 지속적인 모니터링 체계를 구축할 수 있다.

 

본 글에서는 ASH 데이터를 활용하여 장기적인 성능 트렌드를 분석하는 방법과, 이를 기반으로 데이터베이스 성능을 최적화하는 전략을 설명한다. 이를 통해 서버 이관 후 데이터베이스가 안정적으로 운영될 수 있도록 성능 모니터링을 효과적으로 수행할 수 있도록 한다.


ASH를 활용한 장기적인 성능 트렌드 분석의 필요성

서버 이관 후 성능 변화 감지

  • 새로운 서버 환경에서는 하드웨어 성능, 네트워크 대역폭, 스토리지 속도 등이 기존과 다를 수 있으며, 이에 따라 SQL 실행 속도나 트랜잭션 처리 속도가 변할 수 있다.
  • 이러한 변화를 장기적으로 추적하여 성능 저하의 징후를 사전에 감지하고 최적화하는 것이 중요하다.

특정 시간대의 성능 저하 원인 분석

  • 데이터베이스는 일반적으로 특정 시간대에 부하가 집중되는 경향이 있으며, 예를 들어 업무 시간 중(예: 오전 10시~오후 4시)에 CPU 사용량과 디스크 I/O가 증가할 수 있다.
  • ASH 데이터를 활용하면 특정 시간대에 발생하는 성능 저하의 원인을 분석할 수 있다.

주기적인 성능 패턴 확인 및 이상 징후 탐지

  • 성능 문제가 발생하기 전에 장기적인 성능 추이를 분석하여, 성능 저하가 점진적으로 진행되고 있는지 확인할 수 있다.
  • CPU 사용량 증가, 디스크 I/O 병목, 특정 SQL의 실행 빈도 변화 등을 주기적으로 모니터링하면 성능 저하를 사전에 예측하고 대응할 수 있다.

ASH 데이터를 활용한 장기적인 성능 트렌드 분석 방법

1. CPU 사용량의 장기적인 변화 분석

CPU 사용량이 시간이 지남에 따라 증가하는지 확인하려면 ASH 데이터를 활용하여 시간대별 CPU 사용량 변화를 분석할 수 있다.

SELECT 
  TO_CHAR(sample_time, 'YYYY-MM-DD HH24') AS time_slot, 
  COUNT(*) AS cpu_usage 
FROM 
  v$active_session_history 
WHERE 
  session_state = 'ON CPU' 
  AND sample_time >= SYSDATE - 30 -- 최근 30일 데이터 분석 
GROUP BY TO_CHAR(sample_time, 'YYYY-MM-DD HH24') 
ORDER BY time_slot;
  • time_slot: 시간별 CPU 사용량 변화 확인.
  • cpu_usage: 해당 시간대에 CPU에서 실행된 세션 수.

이 데이터를 활용하면 CPU 부하가 특정 시간대에 집중되는지, 시간이 지남에 따라 증가하는지 확인할 수 있으며, CPU 과부하가 예상되는 시점을 사전에 파악하여 최적화할 수 있다.


2. 디스크 I/O 부하의 장기적인 변화 분석

디스크 I/O 성능이 점진적으로 저하되는지 확인하려면 User I/O 관련 대기 이벤트를 분석해야 한다.

SELECT 
  TO_CHAR(sample_time, 'YYYY-MM-DD') AS date, 
  COUNT(*) AS io_waits 
FROM 
  v$active_session_history 
WHERE 
  wait_class = 'User I/O' 
  AND sample_time >= SYSDATE - 30 
GROUP BY 
  TO_CHAR(sample_time, 'YYYY-MM-DD') 
ORDER BY 
  date;
  • date: 날짜별 디스크 I/O 부하 확인.
  • io_waits: 해당 날짜에 발생한 I/O 대기 이벤트 수.

이 데이터를 활용하면 디스크 사용량이 점진적으로 증가하고 있는지, 특정 시간대에 부하가 집중되는지를 분석할 수 있다.


3. 특정 SQL의 실행 빈도 변화 분석

데이터베이스 성능이 저하되는 원인 중 하나는 특정 SQL이 과도하게 실행되거나 실행 시간이 증가하는 경우이다. 이를 분석하려면 SQL 실행 빈도를 시간대별로 조회할 수 있다.

SELECT 
  TO_CHAR(sample_time, 'YYYY-MM-DD') AS date, 
  sql_id, 
  COUNT(*) AS execution_count 
FROM 
  v$active_session_history 
WHERE 
  sample_time >= SYSDATE - 30 
GROUP BY 
  TO_CHAR(sample_time, 'YYYY-MM-DD'), 
  sql_id 
ORDER BY 
  execution_count DESC;
  • sql_id: 특정 SQL의 실행 빈도 분석.
  • execution_count: 해당 SQL이 실행된 횟수.

이 데이터를 활용하면 특정 SQL이 시간이 지남에 따라 실행 횟수가 증가하는지 확인할 수 있으며, 실행 빈도가 높은 SQL을 최적화하여 성능을 개선할 수 있다.


4. 대기 이벤트(WAIT EVENT)의 장기적인 변화 분석

데이터베이스 성능이 저하되는 원인을 분석하려면 시간이 지남에 따라 특정 대기 이벤트가 증가하는지를 확인해야 한다.

SELECT 
  TO_CHAR(sample_time, 'YYYY-MM-DD') AS date, 
  event, 
  COUNT(*) AS wait_count 
FROM 
  v$active_session_history 
WHERE 
  sample_time >= SYSDATE - 30 
GROUP BY 
  TO_CHAR(sample_time, 'YYYY-MM-DD'), 
  event 
ORDER BY 
  wait_count DESC;
  • event: 특정 대기 이벤트 분석.
  • wait_count: 해당 이벤트가 발생한 횟수.

이 데이터를 활용하면 특정 대기 이벤트가 점진적으로 증가하는지 확인하고, 이를 해결하기 위한 최적화 작업을 수행할 수 있다.


ASH 데이터를 활용한 성능 최적화 전략

  1. CPU 사용량 증가 감지 및 튜닝
    • CPU 사용량이 점진적으로 증가하는 경우 실행 계획을 분석하여 SQL을 최적화한다.
    • 필요하면 인덱스 추가, 병렬 처리 적용 등을 고려.
  2. 디스크 I/O 병목 해결
    • Full Table Scan이 증가하는 경우 인덱스를 추가하여 I/O 부하를 줄인다.
    • 스토리지 성능 점검 및 디스크 I/O 최적화 수행.
  3. 자주 실행되는 SQL 최적화
    • 과도하게 실행되는 SQL이 있는 경우 실행 빈도를 조정하거나 쿼리 구조를 최적화.
    • SQL 실행 계획을 확인하고 인덱스를 재조정.
  4. 대기 이벤트 최적화
    • 트랜잭션 락이 증가하는 경우, 트랜잭션 크기를 조정하여 병목을 줄인다.
    • 데이터베이스 튜닝을 통해 특정 대기 이벤트를 최소화.

ASH 데이터를 활용하면 데이터베이스 성능을 장기적으로 모니터링하고, CPU 사용량, 디스크 I/O, SQL 실행 빈도, 대기 이벤트 등의 변화를 분석할 수 있다.

 

특히, 서버 이관 후 새로운 환경에서 예상치 못한 성능 문제가 발생할 가능성이 크므로, ASH 데이터를 활용한 지속적인 성능 모니터링이 필수적이다. 이를 통해 데이터베이스의 안정성을 유지하고 최적의 성능을 확보할 수 있을 것이다.