Skip to content

진단 도구 4열 대응표 — AWR ↔ ASH ↔ ADDM ↔ Statspack (템플릿) ​

17화에서 제정했다(1판). 시스템 전체를 진단할 때는 도구보다 질문을 먼저 고른다. 질문마다 답할 수 있는 칸과 답할 수 없는 칸이 다르다. T5 시스템 성능 리포트를 쓸 때 옆에 둔다. T5의 3번(9칸)은 AWR이, 5번(구간 안의 시간 분포)은 ASH가, 4번(권고)은 ADDM이 채운다. 팩이 없는 현장에서는 Statspack이 3번을 채우고, 5번은 스냅샷 간격으로 대신한다.


왜 이 문서가 있는가 ​

16화 T5-001 (AWR 한 시간 한 장)      "락은 한 시간의 5.5 % — 부차적"
조민우 (정산 현업)                   "6/17 10시 반에 정말로 화면이 다 멈췄어요. 5분쯤."

17화(7월 1일)에 같은 한 시간을 다시 만들어 네 도구로 나란히 봤다.

17화 실측 (ora-hanorder · 같은 한 시간 · 3세션 · 10:30 ~ 10:35에 블로킹 체인 5분)그 도구에서 읽은 것
AWR 한 시간enq: TX 5.5% · 평균 702ms · 행 락의 88%는 SYS 통계 테이블 · 그 SQL은 목록에 없다
ASH (10초 · 1초 표본)10:30 ~ 10:35 enq: TX 100% · 평균 활성 세션 2.00 · CPU 0% · 막은 세션 = 세션 1(그 5분 동안 표본 0. 쉬면서 락을 쥐고 있었다)
ADDM 한 시간1위 Sequence Usage 88%(근거가 다른 칸과 맞지 않아 기각) · 4위 Row Lock Waits 6.24% · Rationale에 막은 세션의 SID · SERIAL#(채택)
Statspack (팩 없음)한 시간 enq: TX 5.7%(AWR과 같은 평균) · 5분 스냅샷 99.5%

도구 하나만 들고 가지 말고, 질문을 들고 가서 그 질문에 답할 수 있는 칸을 고른다.


대응표 (1판) ​

A. 무엇을 남기나 ​

AWRASHADDMStatspack
남기는 것누적 계량기의 스냅샷. 리포트는 두 스냅샷의 뺄셈활성 세션의 순간 사진. 1초에 한 번두 스냅샷 사이를 분석한 과제(Finding · Recommendation)누적 계량기의 스냅샷. 리포트는 뺄셈
해상도스냅샷 간격(기본 1시간 · 수동 스냅샷)메모리 1초 · 디스크 10초스냅샷 구간스냅샷 간격(직접 찍거나 spauto 잡)
어디에 · 얼마나SYSAUX · 보존(기본 8일)메모리 ASH buffers(고리 버퍼. 17화 DB는 4MB여서 3세션 한 시간 분량이 다 들어가지 않는다) · 디스크 10개에 1개 · AWR 보존SYSAUX(DBA_ADVISOR_*)PERFSTAT 스키마(17화에서 132.8MB로 시작) · 지울 때까지(sppurge)
얻는 함수 · 스크립트AWR_REPORT_TEXT · awrrpt.sqlV$ACTIVE_SESSION_HISTORY · DBA_HIST_ACTIVE_SESS_HISTORY · ASH_REPORT_TEXT · ashrpt.sqlDBMS_ADDM.ANALYZE_DB · GET_REPORT · addmrpt.sql · 스냅샷마다 자동STATSPACK.SNAP · spreport.sql
팩진단 팩진단 팩진단 팩필요 없음
멀티테넌트 (이 버전 실측)루트 리포트에 9칸이 다 있다(16화)PDB에서도 그 PDB의 표본이 보인다 · PDB 안의 디스크 표본은 DBID로 거른다루트에서PDB에만 설치 · 리포트(루트 미지원)

B. 질문 → 칸 ​

질문AWRASHADDMStatspack
얼마나 바빴나DB Time ÷ Elapsed표본 × 간격 ÷ 구간Activity: 평균 활성 세션DB time ÷ Elapsed · Av Act Sess
시간이 어디로 갔나Top Foreground Events · Time Model표본의 EVENT · SESSION_STATE 분포Finding의 ImpactTop 5 Timed Events
언제✗ 구간 평균뿐(리포트 뒤쪽 ASH 절은 ASH의 칸)○ 분 · 초 · 원하는 칸✗ 구간 평균뿐스냅샷 간격만큼. 미리 좁혀 둔 만큼만
누가 누구를 막았나✗ Segments by Row Lock Waits는 횟수○ BLOCKING_SESSION · SERIAL# (막은 쪽이 쉬었으면 이름만)Rationale에 막은 세션의 SID · SERIAL#✗
어느 SQLSQL ordered by: 누적 기준 상위만(Captured %)표본의 SQL_ID · TOP_LEVEL_SQL_IDTop SQL FindingSQL ordered by (level 5 이상)
어느 객체Segments by … (횟수 · 블록)CURRENT_OBJ#(대기 클래스가 Application · Concurrency · Cluster · User I/O일 때만)Related ObjectSegments (level 7)
어느 프로그램 · 화면(SQL의 MODULE · ACTION)MODULE · ACTION · CLIENT_ID · PROGRAM(Rationale)—
무엇을 해야 하나✗✗○ 가설(Rationale을 표본으로 다시 센 뒤에 채택)✗
지나간 뒤에 칸을 다시 자를 수 있나✗○ (보존 기간 동안)✗✗
짧고 잦은 일 (수 µs × 수백 번)○ 횟수와 시간을 다 센다✗ 표본에 거의 남지 않는다—○

C. 함정 (17화 실측) ​

도구함정실측
AWR평균: 분자가 몰려 있어도 분모는 구간 전체enq: TX 599초 ÷ 3,600 = 5.5% · 그 599초는 300초 안에 몰려 있다
AWR두 무리의 평균: Avg Wait853번 평균 702ms = 10초 × 60 + 4ms 미만 × 793 · Wait Event Histogram을 같이 본다
AWR횟수와 시간Row Lock Waits 88%(횟수). 시간은 0초
ASH막은 쪽이 Idle이면 표본이 없다폭발 5분 동안 0장 · ASH 리포트 BLOCKING SESSION NOT FOUND
ASH메모리는 고리라서 곧바로 보지 않으면 덮인다62분 런이 끝난 순간 메모리에 남은 가장 오래된 표본이 런 14~15분째
ASH 리포트l_data_src를 빼면 메모리와 디스크를 이어 붙이다가 에러 없이 틀린 리포트가 나온다표본 313 · AAS 0.87 / 267 · 0.74 · enq: TX 없음(두 번). 한 시간은 l_data_src => 2
ASH 리포트벽시계 5분 칸이 폭발을 둘로 자른다. 칸마다 1등이 바뀐다같은 5분이 세 런에서 30 + 30(두 칸 다 1등은 CPU) · 50 + 10 · 4 + 55
ADDMImpact도 구간 평균이다. 순위로 중요도를 정하지 않는다Row Lock Waits 4~5위 · 그 5분에는 AAS 2.00
ADDM다른 칸과 맞지 않는 칸에서 1위가 나올 수 있다Sequence Usage = Time Model sequence load(깃발이 켜진 채) · 권고를 따라도 그대로
StatspackAWR과 같은 평균의 함정 · ASH가 없다한 시간 5.7%. 5분 스냅샷이면 99.5%
NONE막아 주지 않는다. 새로 모으는 것만 멈춘다ADDM ORA-13716 · ASH 표본 0 · SQL Monitor 0 / AWR · ASH 리포트 · DBA_HIST 조회는 된다(그래도 위반)

D. 읽는 순서 (17화) ​

1  AWR 한 시간     — 얼마나 · 어디로 (16화 9칸)         ← 결론을 내지 않는다. 질문을 만든다
2  ASH 시간 축     — 언제 · 누가 · 누구를 (분 · 5분 · 블로킹 체인)
3  ADDM            — 권고 = 가설. Rationale 을 2 의 표본으로 다시 센다. 맞지 않는 칸에서 나온 Finding 은 기각
4  아는 것과 대조  — 애플리케이션 · 배치 · 현업의 시각 (16화 ⑨)
팩이 없으면        — 1 = Statspack · 2 = 미리 좁혀 둔 스냅샷 간격 · 주기적으로 남긴 블로킹 트리 (12화 T4 1호 재발방지 3번) · 3 없음

쓰는 법 — 질문마다 한 줄 ​

질문고른 칸 (도구 · 칸 이름)그 칸에서 읽은 것다른 칸에서도 같은 결과가 나오나결론에 쓰나

꼭 채워야 하는 열은 '다른 칸에서도 같은 결과가 나오나'다. 한 도구의 한 칸만으로 낸 결론은 16화의 T5-001처럼 근거가 있는데도 틀릴 수 있다.


금지어 ​

"AWR을 보니 락은 부차적": 언제인지 보기 전에는 쓰지 않는다. 한 시간 중 몇 %인지와 가장 나쁜 5분 중 몇 %인지를 나란히 적는다. "ADDM이 권고했으니": Rationale을 표본으로 다시 센 결과부터 적는다. "팩이 없어서 막혀 있으니 괜찮다": NONE은 막지 않는다. 계약이 없는 서버에서는 DBA_HIST_*도 열지 않는다.


자매 문서

개정 이력: 17화에 제정했다(1판: 같은 한 시간을 세 번 돌린 실측). 18화에 사내 튜닝 표준 제1조의 근거와 세칙(질문 셋, '몇 분'을 기각하지 않는다)으로 올라갔다. 표는 그대로 쓴다.