서버 이관 프로젝트를 진행하는 과정에서 이전 환경과 새로운 환경의 데이터베이스 성능 차이를 지속적으로 모니터링하는 것은 매우 중요한 작업이다. 예상치 못한 병목 현상이나 SQL 실행 지연이 발생하면 서비스 품질이 저하되고, 운영 중 장애로 이어질 가능성이 높다.
이러한 문제를 예방하려면 성능 저하가 발생할 조짐이 보일 때 미리 감지하고 대응하는 것이 중요하다. 이를 위해 Oracle에서는 ASH(Active Session History) 데이터를 활용한 성능 모니터링과 자동 경고(Alerts) 기능을 제공한다.
- ASH 데이터는 데이터베이스의 활성 세션을 초 단위로 기록하여, SQL 실행 패턴, 대기 이벤트(WAIT EVENT), CPU 및 I/O 사용량을 실시간으로 분석할 수 있는 기능이다.
- 자동 성능 경고 기능을 활용하면 특정 임계치(threshold)를 초과하는 경우, 자동으로 경고를 생성하고 대응 조치를 수행할 수 있다.
본 글에서는 ASH 데이터를 활용하여 자동 성능 경고를 설정하는 방법과, 이를 통해 데이터베이스 성능을 사전에 모니터링하고 문제를 예방하는 전략을 상세히 설명한다. 이를 통해 서버 이관 후 발생할 수 있는 성능 저하 문제를 효과적으로 감지하고 대응할 수 있도록 한다.
자동 성능 경고 설정이 필요한 이유
1. 성능 저하 감지 및 조기 대응
- SQL 실행 시간이 비정상적으로 길어지거나, CPU 사용률이 급격히 증가하는 경우 이를 즉시 감지하고 대응할 수 있다.
- 사전에 설정된 임계치를 초과하면 경고를 자동으로 생성하여 실시간 대응을 가능하게 한다.
2. 예측 가능한 성능 관리
- 과거 성능 데이터를 기반으로 일정 패턴이 반복되는 경우, 특정 시간대나 이벤트 발생 시점을 예측할 수 있다.
- 예측된 패턴을 기준으로 자동 경고를 설정하면, 성능 저하를 미리 감지하고 최적화할 수 있다.
3. 장애 예방 및 가용성 확보
- I/O 대기, CPU 과부하, 블로킹 세션 등의 문제가 발생하기 전에 경고를 설정하면, 장애로 이어지는 것을 방지할 수 있다.
- 운영 환경에서 시스템 가용성을 유지하고, SLA(Service Level Agreement)를 준수하는 데 도움이 된다.
ASH 데이터를 활용한 자동 성능 경고 설정 방법
1. 실행 시간이 긴 SQL 자동 감지 및 경고 설정
실행 시간이 일정 기준을 초과하는 SQL을 감지하고 경고를 설정하려면 ASH 데이터를 활용하여 실행 시간이 긴 SQL을 조회한 후, 임계치를 설정해야 한다.
1) 실행 시간이 긴 SQL 조회
아래 SQL을 실행하면 최근 30분 동안 실행된 SQL 중 평균 실행 시간이 가장 긴 SQL을 확인할 수 있다.

- AVG(elapsed_time) > 5000000 → 실행 시간이 5초를 초과하는 SQL을 감지.
- execution_count → 실행 횟수를 기반으로 자주 실행되는 SQL 분석.
2) 경고 설정
Oracle에서는 DBMS_SERVER_ALERT 패키지를 사용하여 특정 임계치를 초과하면 자동으로 경고를 생성할 수 있다.

- warning_value = 5000000 → SQL 실행 시간이 5초를 초과하면 경고 발생.
- critical_value = 10000000 → SQL 실행 시간이 10초를 초과하면 심각 경고 발생.
이 설정을 통해 SQL 실행 시간이 길어질 경우 즉시 경고가 발생하도록 구성할 수 있다.
2. CPU 사용량이 높은 SQL 자동 감지 및 경고 설정
CPU 사용량이 급격히 증가하면 데이터베이스 성능이 저하될 수 있으므로, 특정 임계치를 초과할 경우 경고를 생성하는 것이 필요하다.
1) CPU 사용량이 높은 SQL 조회

- COUNT(*) > 100 → CPU에서 100회 이상 실행된 SQL을 감지.
2) CPU 사용량 초과 시 경고 설정

- warning_value = 80 → CPU 사용량이 80%를 초과하면 경고.
- critical_value = 95 → CPU 사용량이 95%를 초과하면 심각 경고.
이 설정을 통해 CPU 사용률이 급격히 증가할 경우 즉시 경고를 받을 수 있다.
3. 블로킹 세션 자동 감지 및 경고 설정
블로킹 세션이 발생하면 데이터베이스 성능이 급격히 저하될 수 있으므로, 이를 감지하고 경고를 설정하는 것이 필요하다.
1) 블로킹 세션 조회

- COUNT(*) > 5 → 블로킹이 5회 이상 발생한 세션을 감지.
2) 블로킹 세션 발생 시 경고 설정

- warning_value = 5 → 블로킹 세션이 5개 이상 발생하면 경고.
이 설정을 통해 블로킹 세션이 발생하면 즉시 경고를 받아 대응할 수 있다.
ASH 데이터를 활용하면 SQL 실행 시간, CPU 사용량, 블로킹 세션 등의 성능 지표를 실시간으로 감지하고, 자동 경고를 설정하여 성능 저하를 사전에 방지할 수 있다.