8. Statspack / AWR
2010.06.13 09:26
▣ Statspack/AWR
- Statspack - 8i부터 사용, AWR - 10g 이후 사용
- Ratio 기반과 Wait Event 기반 성능진단 방법 모두 가능
- 동적성능 뷰(Dynamic Performance View)
v$segstat | statistics on shared SQL area. |
v$undostat | aggregate latch statistics for both parent and child latches |
v$latch | aggregate latch statistics for both parent and child latches |
v$latch_children | statistics about child latches. |
v$sgastat | detailed information on the system global area (SGA). |
v$pgastat | PGA memory usage statistics |
v$sysstat | lists system statistics |
v$system_events | information on total waits for an event. |
v$wait_stat | lists block contention statistics |
v$sql | statistics on shared SQL area. |
v$sql_plan | the execution plan information |
v$sql_stats | basic performance statistics for SQL cursors |
v$active_session_history | displays sampled session activity in the database |
v$osstat | displays system utilization statistics from the operating system |
- Statspack과 AWR은 거의 같은 내용이지만 정보 수집 방식에 차이가 있음
- Statspack은 SQL을 이용한 딕셔너리 조회 방식, AWR은 DMA 방식으로 SGA를 직접 접근하므로 더 많은 정보를 수집
- Statspack은 9i에서는 부하때문에 수동으로 수집하나 10g부터는 자동으로 수집(DB 속에 내장된 Datawarehouse, 1시간 주기로 1주일 보관)
▣ Statspack/AWR 기본 사용법
- Statspack은 PERFSTAT 계정에 stats$ 이름의 뷰로 성능 정보를 조회
- @?/rdbms/admin/awrrpt 스크립트 사용 : 표준화된 보고서
- @?/rdbms/admin/spreport 스크립트 사용 : Statspack 이용
- 정해진 기간동안 각 구간별로 SQL 수행횟수(execute count)
select to_char(min(s.begin_interval_time), 'hh24:mi') begin
, to_char(min(s.end_interval_time), 'hh24:mi') end
, sum(b.value-a.value) "execute count"
from dba_hist_sysstat a, dba_hist_sysstat b, dba_hist_snapshot s
where s.instance_number = &instance_number
and s.snap_id between &begin_snap and &end_snap
and a.stat_name = 'execute count'
and b.stat_id = a.stat_id
and b.snap_id = s.snap_id
and a.snap_id = b.snap_id - 1
and a.instance_number = s.instance_number
and b.instance_number = s.instance_number
group by s.snap_id
order by s.snap_id
▣ Statspack/AWR 리포트 분석
- 10g AWR의 경우 보고서 길이가 80 페이지 분량이지만 필요한 부분만 분석한다.
- (분석 사례)
Load Profile ~~~~~~~~~~~~ Per Second Per Transaction --------------- --------------- Redo size: 884.68 5,704.03 Logical reads: 30.62 197.41 Block changes: 4.50 29.02 Physical reads: 0.14 0.91 Physical writes: 0.46 2.95 User calls: 1.16 7.48 Parses: 1.57 10.12 Hard parses: 0.12 0.80 Sorts: 0.89 5.72 Logons: 0.04 0.23 Executes: 4.19 27.04 Transactions: 0.16 |
- per second = 초당 부하 발생량
- per transaction = 지표값 / transaction
- dba_hist_sysstat 뷰에서 얻은 결과로 v$sysstat에서도 구할 수 있음
- (v$sysstat 테이블에서 다음 질의의 결과들 임)
select value rsiz from v$sysstat where name='redo size';
select value rsiz from v$sysstat where name='session logical reads';
...(생략)
% Blocks changed per Read: 14.70 Recursive Call %: 94.71 Rollback per transaction %: 0.00 Rows per Sort: 8.81 |
- % Blocks changed per Read : 읽은 블록중 갱신이 발생하는 비중
- Rollback per transaction % : 최종적으로 커밋되지 못하고 롤백된 트랜잭션 비중
- Recursive Call % : 전체 Call 중 Recursive Call이 차지하는 비중, 사용자정의함수/프로시저를 사용하면 수치가 높아지며 하드파싱에 의해서도 영향 받음
- Rows per Sort : 소트 수행시 평균 몇 건씩 처리했는지 나타냄
Instance Efficiency Percentages (Target 100%) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Buffer Nowait %: 100.00 Redo NoWait %: 100.00 Buffer Hit %: 99.54 In-memory Sort %: 100.00 Library Hit %: 96.56 Soft Parse %: 92.04 Execute to Parse %: 62.58 Latch Hit %: 99.98 Parse CPU to Parse Elapsd %: 36.25 % Non-Parse CPU: 86.45 |
- Execute to parse % 항목을 제외하면 모두 100%에 가까움
- Parse CPU to Parse Elapsed가 낮은 값은 Active 프로세스가 동시 폭주하여 과도한 Parse Call 발생
Shared Pool Statistics Begin End ------ ------ Memory Usage %: 43.21 44.52 % SQL with executions>1: 78.09 91.36 % Memory for SQL w/exec>1: 89.58 86.09 |
- AWR 리포트 구간 시자과 끝지점의 메모리 상황
Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time Wait Class ------------------------------ ------------ ----------- ------ ------ ---------- CPU time 2 13.6 control file parallel write 606 1 2 8.5 System I/O db file sequential read 224 1 5 7.3 User I/O db file parallel write 592 1 2 6.5 System I/O control file sequential read 751 1 1 3.7 System I/O ------------------------------------------------------------- |
- AWR 리포트 구간 중 누적 대기 시간이 가장 컷던 대기 이벤트 5개
- CPU time은 대기 이벤트가 아니지만 가장 오래 대기를 발생시켰던 이벤트와 점유율 비교를 위하여 표시
- CPU time이 가장 비중이 높으면 DB가 양호한 상태
- latch나 lock이 높으면 이상신호이지만 latch의 경우는 CPU 사용률이 높으면 같이 높아도양호
- 트랜잭션 위주 시스템의 경우는 log file sync 대기 이벤트가 top 5에 있으면 이상 아닐수도 있음
- I/O 관련 이벤트인 db file sequential read, db file scattered read 대기 이벤트가 상위에 있으면 정상일 수 있음, cpu 사용율도 같이 높다면 I/O 튜닝 필요
- 대기 이벤트 상황이 문제가 없어도 성능이 느린 경우가 있을 수 있는데 이경우는 peak time 전후로 시스템 레벨로 구간을 측정하기 때문일 수 있다. 상세한 분석이 필요하며 ASH 기능으로 보완하여 분석한다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
47 |
2. 트랜잭션 수준 읽기 일관성
![]() | 휘휘 | 2010.06.06 | 20213 |
46 | 3. 비관적 vs. 낙관적 동시성 제어 | 휘휘 | 2010.06.06 | 8329 |
45 | 4. 동시성 구현 사례 | 토시리 | 2010.06.06 | 11079 |
44 |
5. 오라클 Lock
![]() | 휘휘 | 2010.06.06 | 26512 |
43 |
7. Response Time Analysis 방법론과 OWI
![]() | balto | 2010.06.13 | 8202 |
» | 8. Statspack / AWR | balto | 2010.06.13 | 12910 |
41 | 9. ASH(Active Session History) | 실천하자 | 2010.06.13 | 15731 |
40 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.13 | 8248 |
39 |
12. 데이터베이스 성능 고도화 정석 해법
![]() | 휘휘 | 2010.06.13 | 7248 |
38 |
5. V$SYSSTAT
[1] ![]() | 토시리 | 2010.06.13 | 9977 |
37 | 10. V$SQL | 실천하자 | 2010.06.13 | 12803 |
36 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6641 |
35 |
3. 라이브러리 캐시 구조
![]() | balto | 2010.06.27 | 9957 |
34 |
4. 커서 공유
![]() | balto | 2010.06.27 | 9324 |
33 |
1. SQL과 옵티마이저
![]() | 휘휘 | 2010.06.27 | 7326 |
32 |
2. SQL 처리과정
![]() | 휘휘 | 2010.06.27 | 20929 |
31 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.27 | 7032 |
30 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.27 | 11862 |
29 |
6. 바인드 변수의 부작용과 해법
![]() | 실천하자 | 2010.06.27 | 14868 |
28 |
7. 세션 커서 캐싱
![]() | 토시리 | 2010.06.29 | 10711 |