Oracle Database

Oracle Statspack이란 무엇인가

열린기술자·2016년 5월 20일·조회 4,647

1. 개요

Oracle 데이터베이스는 8.1.6 버전부터 기본적으로 Statspack이라는 성능 데이터 수집 및 보고 도구를 제공한다. Statspack은 기존의 Bstat/Estat에 비해 수집된 진단 자료가 영구 테이블에 저장된다는 점에서 더 유용하다.

이 자료는 Oracle 데이터베이스 8 기준이다. Oracle 8 환경에서는 Statspack을 이용해 일정 시점의 성능 정보를 수집하고 두 스냅샷 사이의 차이를 보고서로 확인하는 방식이 일반적이다.

2. 설치

  1. DBA 권한을 가진 계정으로 접속한다.
  2. $ORACLE_HOME/rdbms/admin/spcreate.sql을 실행한다.
  3. Disk I/O를 고려하여 설치 대상 테이블스페이스와 임시 테이블스페이스를 결정한다.
  4. perfstat 계정 패스워드는 변경하는 것을 권고한다.
  5. timed_statistics = true로 설정되어 있어야 한다.

설치 과정에서는 Statspack 전용 사용자와 관련 테이블, 패키지가 생성된다. 성능 수집에 대한 보다 자세한 내용은 $ORACLE_HOME/rdbms/admin/spdoc.txt를 확인한다.

3. statspack.snap 프로시저 수행

다음은 10분마다 statspack.snap 프로시저를 통해 정보를 수집하는 shell script이다. 예시에서는 perfstat 패스워드를 tiger로 수정하였다.

#!/bin/sh
sqlplus -s internal << EOF
alter system set timed_statistics=true;
quit
EOF

while true
do
sqlplus -s perfstat/tiger << EOF
execute statspack.snap;
quit
EOF

sleep 600
done

수집 주기는 시스템 부하와 분석 목적에 맞게 조정한다. 너무 짧은 간격으로 수집하면 관리 테이블의 데이터가 빠르게 증가할 수 있고, 너무 긴 간격으로 수집하면 특정 시간대의 병목을 놓칠 수 있다. 운영 환경에서는 먼저 테스트 환경에서 스크립트가 정상적으로 접속하고 스냅샷을 생성하는지 확인한 뒤 적용하는 것이 좋다.

4. 보고서 생성

해당 기간의 snap_id를 확인한 후 $ORACLE_HOME/rdbms/admin/spreport.sql을 실행한다. 보고서가 생성되면 WARNING, ERROR가 없는지 확인해 보자.

다음 SQL은 날짜별로 snap_id의 최소값과 최대값, 그리고 해당 스냅샷의 시간을 확인한다.

select instance_number
     , to_char(snap_time,'yyyy/mm/dd') "DATE"
     , min(snap_id)
     , max(snap_id)
     , to_char(min(snap_time),'hh24:mi:ss') min_time
     , to_char(max(snap_time),'hh24:mi:ss') max_time
     , to_char(startup_time, 'mm/dd hh24:mi') startup
from stats$snapshot
group by instance_number, to_char(snap_time,'yyyy/mm/dd'), startup_time

보고서를 만들 때는 분석하려는 구간의 시작 스냅샷과 종료 스냅샷을 선택한다. 예를 들어 장애나 성능 저하가 발생한 시간이 명확하다면, 그 직전과 직후의 스냅샷을 기준으로 보고서를 생성해 대기 이벤트, SQL 통계, I/O 관련 항목을 우선 확인하면 된다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.