● Optimizer Statistics
◎ 정의
- 옵티마이져(optimizer)가 실행계획을 세울 때 필요한 통계정보
◎ 특징
- 출처는 일부 DBA_로 시작하는 Static Data Dictionary Views
- 다음과 같은 정보가 포함됨
1. 테이블 및 인덱스의 크기
2. 테이블 : ROW의 갯수, 평균 row의 크기, chain의 갯수
3. 인덱스 : 높이와 delete된 leaf row의 갯수
- 관련 패키지 : DBMS_STATS
- 이 내용을 분석해야 SQL 튜닝이 가능함.
- 주기적으로 수집을 해줘야 함.(변화가 많은 오브젝트를 기준으로)
- gather_stats_job : 테이블 선별, 히스토그램 비율과 결정을 알아서 해줌.
매일 밤 실행됨. 정확성에 문제가 있을 수 있음.
◎ 분류
○ System Stats
: 환경적 데이터의 상황을 알려줌. 9i R2부터 등장.
- dbms_stats.GATHER_SYSTEM_STATS
○ Data Stats
: 내부의 데이터의 상황을 알려줌
- dbms_stats.GATHER_DATABASE_STATS
- dbms_stats.GATHER_DICTIONARY_STATS
- dbms_stats.GATHER_FIXED_OBJECTS_STATS
- dbms_stats.GATHER_INDEX_STATS
- dbms_stats.GATHER_SCHEMA_STATS
- dbms_stats.GATHER_TABLE_STATS
● Performance Statistics
◎ 정의
- 서버 튜닝을 하기 위한 performance의 통계정보
◎ 특징
- V$로 시작하는 Dynamic Performance Views
- 이 통계 정보를 분석해야 서버 튜닝이 가능함
- 단점 : 누적된다. 휘발성이다. -> 문제의 원인을 금방 찾을 수 없다.
- 버전에 따라 통계를 수집하는 방식이 달라짐
- 8i이전
utlbstat.sql(b : begin), utlestate.sql(e : end) -> report.txt
일정 주기 snapshot으로 결과물을 생성, 파일의 위치는 $ORACLE_HOME/rdbms/admin 이다.
- 8i부터
statspack : sp*.sql -> perfstat유저가 생성되고, ...
- 10g부터
AWR + MMON + ADDM
◎ 분류
○ Activity
- v$statname -- 363
- v$sysstat : 인스턴스 시작이래로 있었던 모든 Activity의 누적 -- 363
- v$sesstat : 현재 연결중인 각 session의 Activity의 누적, -- 363*세션수
- v$service_stats : 서비스 이름별 time model Activity의 누적 -- 주로 time model 관련 지표
- v$mystat : 내 세션의 Activity의 누적 -- 363
※ 사라진 세션이 문제가 될수도 있다. -> trace를 조정(cctv설치)
○ Wait
- v$event_name : 발생 가능한 wait의 목록
- v$system_event : 인스턴스 시작이래로 경험한 wait(event)의 누적 -> v$system_wait_class
- v$session_event : 현재 연결중인 각 세션이 경험한 wait(event)의 누적 -> v$session_wait_class
- v$service_event : 서비스 이름별 wait의 누적 -> v$service_wait_class
- v$session_wait (10g ASH{Active Session History}) or v$session: 지금 당장 기다리고 있는 wait(event)
○ Others
- v$sql
- v$latch
- v$filestat
- v$pgastat
...
기타참고사항
- 대기 이벤트 = System API Call
가령 SQL*Net message to client 대기는 Server Process가 OS에서 Network Send API 요청을 하고 응답이 오기를 기다린다는 것을 의미한다. OS는 Server Process가 요청한 Data를 TCP Send Buffer에 넣는 것으로 일을 마치고 Server Process에게 응답을 보낸다. 즉, SQL*Net message to client 대기는 실제 Network 전송이 끝나기를 기다린다는 의미가 아니라 OS가 Send Buffer에 성공적으로 Data를 등록하기를 기다린다는 것을 의미한다. Network API들은 이런 속성을 지니고 있다.
- 경영 : 불확실성을 최소화하는 과정
참조 : http://ukja.tistory.com/219
'Oracle > Admin' 카테고리의 다른 글
Moving Data (SQL*Loader, Export/Import, Datapump) (0) | 2009.12.15 |
---|---|
Backup and Recovery (0) | 2009.12.10 |
Performance Management (0) | 2009.12.08 |
Proactive Maintenance (0) | 2009.12.07 |
Configuring the Oracle Network Environment (0) | 2009.12.04 |