1. 개요

Oracle 데이터베이스는 8.1.6 버전부터 기본적으로 Statspack이라는 데이터 수집, 보고 툴을 제공한다. Statspack은 기존의 Bstat/Estat에 비해 수집된 진단 자료가 영구 테이블에 저장되어 있다는 점에서 보다 우수하다. 

이 자료는 Oracle 데이터베이스 8 기준이다.

 

2. 설치

  1. dba 권한을 가진 계정
  2. $ORACLE_HOME/rdbms/admin/spcreate.sql 실행
  3. DIsk I/O를 고려하여 설치 대상 Tablespace와 임시 Tablespace 결정
  4. perfstat 계정 패스워드는 변경 권고
  5. timed_statistics = true로 설정되어야 함

성능 수집에 대한 보다 자세한 내용은 $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의 min/max 및 시간을 확인한다.

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