모든 오라클 데이타베이스를 정밀하게 튜닝하기 위해서는 히스토리컬 데이타 수집 메커니즘이 필요하며, 또 변경사항들이 데이타베이스 성능에 미치는 영향을 보여주는 리포트로 이 데이타를 번역하는 기능이 필요하다. 오라클의 새로운 STATSPACK 유틸리티는 STATSPACK 테이블에 대한 트렌드 분석 리포트를 작성하는 기능과 함께 필요한 데이타를 수집할 수 있는 기능을 제공한다.

 

토탈 시계열 리포트
이들 리포트들은 지정된 기간 중에 발생한 데이타베이스의 전반적인 트렌드를 보여주고 있다. MS-Excel로 작성한 |그림1|의 예제는 데이타베이스 증가율을 나타내기 위해 추가한 선형 회귀선으로 표시한, 데이타베이스의 총 바이트 수에 대한 리포트이다.


[그림1] 데이타베이스 크기에 대한 시계열 리포트

 

일간 리포트
일간 리포트는 시간별로 묶은 시간별 트렌드를 나타내는 것이다. |그림 2|의 예제에서는 그 날의 시간별로 평균을 낸 평균 읽기 I/O와 쓰기 I/O에 대한 사인을 볼 수있다. 이 예제에서는 이 데이타베이스가 오전 7시에 최고점의 읽기 I/O 사인을 갖고 있으며, 다시 오후 8시에 최고점에 도달했다는 사실을 확인할 수 있다. 또한 이 데이타베이스는 상대적으로 일정한 쓰기 사인을 가지고 있다는 사실도 알 수 있다.

[그림2] 시간대별 평균 I/O 플롯


주간 리포트

|그림 3|에서는 요일별로 평균을 낸 디스크 정렬을 볼 수 있다. 이 그림에서는 디스크 정렬이 월요일에 높고, 화요일에 최고점에 도달하며, 수요일에 높았다가 목요일과 금요일에는 떨어지는 확실한 사인을 볼 수 있다. 이 리포트는 DBA에게 잠재적으로 TEMP 테이블스페이스에 높은 영향을 미칠 수 있는 시간대를 신속하게 알려 줄 것이다.

 


[그림3]’요일별’ 평균 STATSPACK Query

 

트렌드 분석에 가장 적합한 STATSPACK 데이타
STATSPACK에서 사용할 수 있는 통계가 수백 개이기 때문에 과연 어떤 메트릭스가 가장 유용한가라는 의문이 제기된다. 필자는 다음과 같은 메트릭스를 선정했다.

* 데이타 버퍼 적중률
이는 init.ora 파일의 db_block_buffers 패러미터로 정의된 대로 오라클 데이타 버퍼의 효율성을 측정한다.

• 정렬(Sort)
데이타베이스에서의 정렬 규모를 모니터링하는 것이 중요하며 특히 TEMP 테이블스페이스(정렬(디스크))에서 수행된 정렬 규모를 더욱 철저하게 모니터링해야 한다.

• 물리적 디스크 읽기
I/O 감축의 일차적 목적은 오라클 튜닝이기 때문에 시간별 디스크 읽기를 보여주는
트렌드 리포트는 재순차(Re-sequence) 로우를 인덱스 순서로 테이블을 재구성하는데 따른 영향을 측정하는 데 매우 유용할 수 있다.

• 물리적 디스크 쓰기
디스크 쓰기 규모는 오라클 데이타베이스의 전체 처리 성능에 상당한 영향을 미치게되며, 롤백 세그먼트 활동이 중요한 경우 특히 중요하다.

• I/O 대기
이는 I/O 경합(Contention)을 확인하고 수정하는 데 사용될 수 있는 매우 중요한메트릭스이다. 높은 I/O 대기 상태는 2개 이상의 데이타 파일에 동시에 액세스되는경우에 발생하며, DASD의 읽기-쓰기 헤드 이동은 디스크가 I/O 종료를 대기시키는 원인이 되기도 한다.

• 버퍼 비지 웨이트(Buffer Busy Waits)
버퍼 버스트(Bust) 대기는 오라클 데이타 블록이 버퍼에 상주하지만 필요한 프로그램이 데이타 블록을 읽어들이기 위해 대기해야만 하는 경우 일어난다. 버퍼 비지 웨이트는 일반적으로 1개 테이블이 동시에‘UPDATE’혹은‘INSERT DML’을 갖고 있으며 단지 1 개의 프리리스트(Freelist)만이 테이블용으로 정의돼 있는 경우 일어날 수 있다.

• 리두 로그 공간 요구(Redo Log Space Request)
리두 로그 공간 요구는 로그 버퍼가 리두 로그 활동 볼륨을 수용하기에는 너무 작을
때 발생한다.

• 래치 핀 적중률(Latch Pin Hit Ratio)
데이타베이스 인스턴스의 핀 적중률은 init.ora 파일의 shared_pool_size의 크기조정에 대한 좋은 아이디어를 제공한다.

• 테이블 페치 컨티뉴드 로우(Table Fetch Continued Row)
이 메트릭스는 데이타베이스와 연결된 로우들에 대한 전반적인 지시를 제공한다. 연결이 과도한 경우, 질의 서비스에 추가 I/O가 요청되며 DBA는 테이블의 PCTFREE를 늘리고 테이블이 체인들을 해제하도록 재구성해야 한다.
STATSPACK 테이블의 구조를 이해하고 약간의 연습을 거치면, 사용자 정의형 리포트를 손쉽게 작성할 수 있다. 일단 성능 데이타가 포착되면, STATSPACK 리포트를 테이블에 대해 실행시킬 수 있다. 또한 선형 회귀와 예측 모델을 결합하고 있기 때문에 DBA는 이전 소모율을 토대로 디스크 메모리를 더 주문해야 하는 시기를 예측할 수 있다.

 

< STATSPACK 테이블에서 성능 트랜드 데이타  추출 쿼리>

 

 

< STATSPACK 데이타의 시계열 추출 결과에서 트랜드 성능 분석 예시>

 

 

 

 

 

 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

One thought on “STATSPACK 을 이용한 오라클 DB 성능 트랜드 분석”
  1. I love what you guys tend to be up too. Such clever work
    and reporting! Keep up the wonderful works guys I’ve you
    guys to blogroll.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다