IT기술/Oracle

01 OWI 소개

dobbby 2014. 1. 27. 10:58
반응형

1. OWI 란?

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

프로세스가 특정 자원을 획득하지 못하고 대기하는 것을 "XXX 이벤트를 대기한다" 고 표현한다.

이벤트 혹은 대기이벤트는 프로세스가 특정 자원을 획득할 때가지 발생하기를 기다리는 "사건"으로 정의할 수 있다.

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

사용자 관점에서 가장 의미가 있는 것은 "대기시간" 이다.

Response Time = Service Time + Wait Time

Service Time 과 Wait Time 을 낮추면 자연스럽게 응답시간이 낮아지고 사용자의 성능 만족도는 증가한다.

어떤 문제들은 Service Time 을 낮추면 자연스럽게 Wait Time 이 낮아지기도 한다.

어떤 문제들은 Service Time 을 낮추는 것은 불가능한 반면 Wait Time 을 낮추는 것만이 유일한 방법인 경우도 많다.




2. OWI 의 특징

1) OWI 는 문제 지향적 (Problem-Oriented) 이다

오라클은 문제가 생길 때마다, 즉 원하는 자원을 획득하는데 실패할 때마다 특정 이벤트를 대기함으로써 현재 어떤 문제가 발생했고, 왜 발생했는지를 보고한다.

또한 추가적인 분석을 통해 어떤 프로세스에 의해 문제가 발생했는지의 여부 또한 분석이 가능하다.

따라서 현재 시스템에 발생한 대기현상에 초점을 맞추면 가장 직관적으로 성능문제를 파악할 수 있다

10g 부터 제공되는 AWR (Automatic Workload Repository) 의 성능이력 관리 기능을 이용하면, 과거 특정 시점의 성능문제까지도 OWI 에 기반해서 분석할 수 있다.


2) OWI 는 정량적이다.

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

OWI 는 문제가 왜 발생했는지 뿐만 아니라 구체적으로 어떤 정도의 성능문제를 유발하고 있는지를 표현해준다.


3) OWI 는 징후학적이다.

오라클 성능문제에서도 기존에 관찰되지 않았던 새로운 대기현상들이 발생할 수 있다.


4) OWI 는 개선중이다.

OWI 는 끊임없이 진보하는 방법론이다.




3. OWI 툴

OWI 방법론에서 직/간접적으로 사용할 수 있는 툴

- OWI 다이나믹 뷰

- 기타 중요 다이나믹 뷰

- Extended SQL Trace

- oradebug & dump

- Automatic Workload Repository


1) 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 와 동일한 차원의 값을  클래스 기준으로 제공

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

V$EVENT_HISTOGRAM - 각 대기 이벤트에 대해서 대기 시간의 구간(버킷) 별로 대기회수 보여줌


2) 기타 중요 다이나믹 뷰

대기 현상을 분석하기 위해서는 아래와 같은 다양한 다이나믹 뷰들을 활용할 수 있어야 한다.

V$SESSION                                                                                          : 세션 정보

V$ACTIVE_SESSION_HISTORY                                                                : 세션 히스토리 정보

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                                                                                        : 버퍼 캐시 정보


V$ACTIVE_SESSION_HISTORY(ASH) - 10g 에서 도입된 Automatic Workload Repository (AWR) 기능의 일부로

Active 세션의 이력을 저장, Shared Pool 의 ASH buffers 영역에 저장된다.


V$SEGMENT_STATISTICS - 인스턴스가 가동된 후 의 세그먼트 단위의 통계치를 제공하는 뷰로 

V$SYSSTAT 이나 V$SESSTAT 뷰로는 얻을 수 없는 중요한 정보 제공한다.


3) Extended SQL Trace

SQL Trace 는 SQL 튜닝 뿐만 아니라 대기현상을 분석하는데도 유용한 툴이다.

최근에 확장된 기능을 제공하는 이유로 Extended SQL Trace 라고 부른다.

기본적으로 10046 진단 이벤트를 통해 활성화되며, 다음과 같은 네가지 레벨로 제어할 수 있다.


LEVEL 1    - SQL 문장의 실행정보 (Parse, Execute, Fetch 단계와 Row source operation 결과) 만을 제공한다.

LEVEL 4    - LEVEL 1 + 바인드 변수 값을 제공한다.

LEVEL 8    - LEVEL 1 + 대기정보를 제공한다.

LEVEL 12  - LEVEL 4 + LEVEL 8, 즉 SQL문장의 실행정보와 바인드 변수값, 대기정보를 제공한다.


4) oradebug 와 dump

oradebug 툴과 dump 파일들은 비록 OWI 와 직접적인 관계는 없지만 대기현상들을 분석하고 이해하는데 매우 유용한 툴들이다.

- 진단이벤트 수행

- 덤프 수행

- 프로세스 제어


5) Automatic Workload Repository

10g 부터 도입된 AWR 은 가장 미약했던 오라클 성능이력관리 부분을 크게 강화시킨 것이다.

수집된 데이터는 DBA_HIST_XXXX 뷰를 통해 조회가능하다.

AWR 이 수집하는 데이터들은 다음과 같다.

- Active Session History

- 부하가 큰 문장

- 시스템 레벨과 세션 레벨에서 Time Model 통계

- 세그먼트와 기타 데이터베이스 객체에 대한 사용 통계치

- V$SESSTAT, v$SYSSTAT, V$SYSTEM_EVENT, V$SESSION_EVENT




4. OWI 데이터 수집

실시간 데이터만으로 성능문제를 완벽하게 분석할 수 없기 때문에 반드시 성능 이력 정보를 보관할 수 있어야 한다.


1) Logoff Trigger

세션이 로그오프될 때 V$SESSION_EVENT, V$SESSTAT 뷰 등을 캡쳐해서 저장하는 기법으로, 단순한 세션을 제외하고는 의미가 없다.


2) SQL 을 이용한 주기적인 수집

수집주기가 길다는 약점이 있고, 심각한 성능문제가 생긴 경우에는 수집을 위한 SQL 문장 자체가 실행되지 않기 때문에 장애분석용으로 사용할 수 없다.


3) Automatic Workload Repository (AWR)

SQL 을 이용한 주기적인 수집보다는 훨씬 가볍고 안정적이지만 데이터를 저장하는 방식으로 인해 수집주기를 필요한만큼 짧게 할 수 없다.


4) Direct Memory Access (DMA)

오라클이 SGA 영역을 직접 액세스 해서 필요한 데이터를 수집하는 기법이다.

AWR 과 달리 데이터를 원하는 주기로 저장할 수 있기 때문에 가장 유연하고 강력 기법이다.




5. 기타

이해하기 위해 알아야 할 추가적인 내용


1) PL/SQL

간단한 PL/SQL, dbms_output, dbms_rowid, dbms_job 과 같은 패키지의 사용법에 대해서 어느 정도 이해할 수 있어야 한다.


2) 스크립트들

show_space

Thomas Kyte 가 작성한 스크립트로 특정 세그먼트의 공간 사용정도를 한눈에 보여준다.


print_table

역사 Thomas Kyte 가 작성한 스크립트로 테이블을 세로로 출력하는 기능을 제공한다.


기타 스크립트

- my_sess_event.sql : 현재 세션의 V$SESSION_EVENT 뷰 결과를 구한다.

- show_param.sql : 히든 파라미터까지 포함한 파라미터 값을 보여준다.

- system_event.sql : 시스템 전체의 대기현황을 V$SYSTEM_EVENT 뷰에서 구한다.

- sesstat.sql : 현재 세션의 V$SESSTAT 뷰의 결과를 구한다.

- undosize.sql : 현재 트랜잭션의 언두 데이터 정보를 얻는다.




반응형