OWI란? - Oracle Wait Interface
프로세스가 겪는 대기현상을 기록하고 관찰하는 일련의 기능과 인터페이스, 그리고 방법론을 통칭하여 OWI라고 부른다.

P1,P2,P3 파라미터 - 현재 대기하는 리소스를 표현한다.
V$SESSION_WAIT뷰나 V$SESSION뷰와 같은 다이나믹 뷰나 SQL Trace등을 통해 관찰 가능.

오라클은 대기회수, 타임아웃회수, 대기시간이라는 세가지 값을 이용해 대기현상을 표현한다.

응답시간 = 서비스시간 + 대기시간
즉, 응답 시간을 낮추려면 서비스시간과 대기 시간을 낮추어야한다 : 문제에따라 서비스시간을 낮추면 대기 시간 또한 떨어지기는 경우도 있지만,
서비스시간을 낮추는 것은 불가능 하고 대기 시간을 낮추는 것 만이 유일한 해법인 경우도 존재한다.


OWI의 특징
- OWI는 문제 지향적이다.
어디가 문제점인지를 지적해줌

- OWI는 정량적이다.
추측이 아닌 '사실'과 '숫자'에 기반한 성능 분석을 가능하게 해준다.

- OWI는 징후학적이다.
DB에 나타나는 이상 징후들을 기반으로하여 해결하게해줌 - 원인은 도출하는데에 있어 실수가 있을 수도 있다.

- OWI는 개선중이다.
점점 좋아지고있음

 

OWI툴
OWI 다이나믹 뷰
- V$EVENT_NAME :
오라클에 정의된 대기 이벤트에 대한 정보를 담고있다.

- V$SYSTEM_EVENT :
인스턴스 기동 후 지금까지 모든 세션에서 발생한 대기이벤트의 누적 정보

- V$SESSION_EVENT :
현재 접속중인 각 세션별 대기 이벤트의 누적 정보

- V$SESSION_WAIT :
각 세션이 현재 대기하고 있는 이벤트에 대한 상세정보

- V$SESSION_WAIT_HISTORY :
V$SESSION_WAIT 정보를 세션별로 10개까지 누적해서 제공

- V$SYSTEM_WAIT_CLASS :
V$SYSTEM_EVENT와 동일한 차원의 값을 클래스 기준으로 제공 - 12개의 대기 이벤트 클래스 값이있다. User I/O. Application, Network, Administraive, Concurrency,
Configuration, Scheduler, Cluster, Idle, System I/O, Commit

- V$SESSION_WAIT_CLASS :
V$SESSION_EVENT와 동일한 차원의 값을 클래스를 기준으로 제공

- V$EVENT_HISTOGRAM :
각 대기이벤트에 대해서 대기시간의 구간별로 대기회수를 보여준다.

기타 중요 다이나믹 뷰
- V$SESSION : 세션 정보
- V$ACTIVE_SESSION_HISTORY : 세션 히스토리 정보 - AWR 기능의 일부 - active session의 이력을 저장하고 있다.
- V$PROCESS : 프로세스 정보
- V$TRANSACTION : 트랜잭션 정보
- V$LATCH, V$LATCH_PARENT, V$LATCH_CHILDREN, V$LATCH_HOLDER : 래치 정보
- V$LOCK, V$LOCKED_OBJECT, V$ENQUEUE_LOCK : 락 정보
- V$SQL : SQL 정보
- V$LIBRARYCACHE, X$KGLLK, X$KGLPN : Library Cache 정보
- V$ROWCACHE, V$ROWCACHE_PARENT : Row Cache 정보
- V$SGASTAT : SGA 정보
- V$SEGMENT_STATISTICS : 세그먼트 레벨 통계 정보 - 인스턴스가 기동된 후의 세그먼트 단위의 통계치 제공. 어떤 세그먼트에 경합이 많이 발생했는지 손쉽게 조회 가능.
실제로 인덱스가 사용되는지 여부 즉각 판단가능.
- V$SESS_TIME_MODEL, V$SYS_TIME_MODEL : Time Model 정보
- V$BH, X$BH : 버퍼 캐시 정보- 버퍼 캐시의 작동 메커니즘을 연구할 대 매우 유용

Extended SQL Trace
10046 이벤트 레벨에 따른 제공 정보
레벨1 : SQL문장의 실행정보(Parse, Execute, Fetch 단계와 Row source operation결과)만을 제공한다
레벨4 : 레벨1 + 바인드 변수 값을 제공한다.
레벨8 : 레벨1 + 대기정보를 제공한다.
레벨12 : 레벨 4 + 레벨 8. 즉, SQL 문장의 실행정보와 바인드 변수 값, 대기정보를 제공한다. - > 따라서 웬만하면 레벨12를 사용해서 정확한 정보를 얻을 수 있다.

활성화하는 방법
1. 현재 세션에서
alter session set events '10046 trace name context forever, level 12';
alter session set events '10046 trace context off';
2. dbms_system을 이용해 다른 세션에 대해 Trace를 수행할 경우
exec sys.dbms_system.set_bool_param_in_session
(sid => , serial =>, parname => 'TIMED_STATISTICS', bval => true);
exec sys.dbms_system.set_int_param_in_session
(sid =>, serial =>, parname => 'MAX_DUMP_FILE_SIZE', intval => 2147483647);
exec sys.dbms_system.set_ev(sid, serial#, 10046, 12, ' ');
3. WAS의 Connection Pool을 통해 오라클에 접속하는 경우 -> dbms_monitor (10g부터)
dbms_monitor를 이용하면 ClientID나 service/module/action명등을 기준으로 trace를 수행할 수 있다 + 통계정보도 이 기준으로 수집가능
exec dbms_monitor.client_id_trace_enable
(client_id => '..', waits => true, binds => true);
exec dbms_monitor.serv_mod_act_trace_enable(...);
exec dbms_monitor.session_trace_enable(...);
4. oradebug를 이용해 다른 세션에 대해 Trace를 수행할 경우
oradebug setospid 12345 (또는 oradebug setorapid 12345)
oradebug unlimit
oradebug event 10046 trace name context forever, level 12
....
oradebug event 10046 trace name context off

트레이스 원본파일 + tkprof툴을 이용하여 변환한 내용을 이용하면 됨


oradebug & dump
oradebug툴은 대기현상들을 분석하고 이해하는데 매우 유용한 툴이다.

특정 세션에 접속하는 방법
1. 원하는 세션의 spid나 pid를 구한다.
2. spid나 pid값을 이용하여 특정 세션에 attach한다
oradebug setospid <SPID> // oradebug setorapid <PID>
3. 트레이스 파일 크기 제한을 끈다
oradebug unlimit
4. attach한 프로세스에 대해 event를 설정한다
oradebug event 10046 trace name context forever, level 8
.......
oradebug event 10046 trace name context off
5. trace파일명을 알아낸다
oradebug tracefile_name

진단이벤트 수행 - 10046, 10053같은 진단 이벤트를 원하는 세션에 대해 수행할 수 있다. 특정 세션에 대해 SQL trace CBO trace등을 수행하는데 유용하다.
oradebug setospid <SPID>
oradebug event 10053 trace name context forever, level 1
.....
oradebug event 10053 trace name context off
.....

덤프 수행 - SGA, PGA, library cache, row cache, buffers, enqueue, latch, heap, hanganalyze등의 덤프를 수행할 수 있다.
oradebug setmypid : 현재 세션으로 attach
oradebug dump library_cache 10 : 레벨10 - 라이브러리캐쉬 전체 내용을 내려받는다
oradebug row_cache 10 : 로우캐쉬 덤프
oradebug dump buffers 10 : 레벨10 - 버퍼캐시 전체의 내용을 내려받는다.
oradebug dump enqueues 10 : 엔큐 덤프
oradebug dump latches 10 : 래치 덤프
oradebug dump heapdump 2 : 힙 영역을 덤프
레벨1 : Top PGA
레벨2 : Top SGA
레벨4 : Top UGA
레벨8 : Current Call
레벨16 : User Call
레벨32 : Large Pool

oradebug dump systemstate 10 : 파라미터/통계/SGA/세션/프로세스 등의 정보를 내려받을 수 있다 - 시스템 전체적인 분석을 하는데 유용

oradebug setospid <PID>
oradebug dump processstate 10
: 특정 프로세스의 세션/PGA 등의 정보를 내려받을 수 있다 - PGA에 대한 분석을 하는데 유용

프로세스 제어 - 문제가 되는 프로세스를 일시정지/재시작 할 수 있다. 문제되는 프로세스를 제어하거나, 현 상태 분석하는 용도로 사용된다
oradebug setospid <SPID>
oradebug suspend : 프로세스 일시 정지
oradebug resume : 프로세스 재개

Automatic Workload Repository
AWR이 수집하는 데이터
- Active Sesson History
- 부하가 큰 문장
- 시스템 레벨과 세션 레벨에서 Time Model 통계
- 세그먼트와 기타 데이터베이스 객체에 대한 사용 통계치
- V$SESSTAT, V$SYSSTAT, V$SYSTEM_EVENT, V$SESSION_EVENT 등
수집된 데이터는 DBA_HIST_XXXX뷰를 통해 조회 가능

 

OWI 데이터 수집
Logoff Triger
세션이 로그오프될때 V$SESSION_EVENT, V$SESSTAT 뷰 등을 캡쳐해서 저장하는 기법

SQL을 이용한 주기적인 수집
몇 분 주기로 필요한 OWI 관련 데이터를 SQL 문장을 통해 수집하는 기법

Automatic Workload Repository(AWR)
오라클이 자동으로 성능데이터 관리. 가볍고 안정적이지만, 데이터를 테이블에 저장함 -> 수집 주기를 짧게할 수 없다.

Direct Memory Access(DMA)
오라클이 사용하는 SGA 영역을 직접 액세스해서 필요한 데이터를 수집하는 기법 - > 일부 성능 모니터링 툴 벤더들이 이 기법을 이용한다.

레이블 (0)

  • 레이블 없음
댓글 쓰기...

첨부 파일  (0)

첨부 파일 추가하기
공유된 파일이 아직 없습니다.