====== OWI 소개 ====== ===== 작성자 ===== ^ 작성자 | 서동길 (starlits_at_adminschool.net) | ^ 작성일 | 2009년 7월 20일 (최초작성) | ===== OWI 정의 ===== - Oracle Wait Interface 에 대한 정의 한다. ==== 오라클 대기현상을 표현하는 3가지 값 ==== - 대기회수 - 타임아웃회수 - 대기시간 ==== 응답시간 ==== - 응답시간은 서비스시간과 대기시간의 합이다. - **Response Time = Service Time + Wait Time** ===== OWI의 특징 ===== - OWI는 문제지향적(Problem-Oriented) 이다. - 오라클은 문제가 생길때마다(원하는 자원을 획득하는데 실패할때마다) \\ 특정 이벤트를 발생하면서 대기함으로써 현재 어떤 문제가 발생했고, 왜 발생했는지를 알려준다. - 이전에는 Buffer cache hit ratio 가 성능진단의 중요 팩터였으나, \\ 9i 이후를 시점으로 컴퓨터파워(CPU,MEM,IO)가 좋아지면서 더 이상 Buffer cache hit ratio 가 더이상 성능진단의 중요 팩터가 아니다. - OWI는 정량적이다. - OWI는 **추축**이 아닌 **사실**과 **숫자**에 기반한 성능분석을 가능하게 한다. - OWI는 징후학적이다. - Wait Event 를 통해 오라클 내부의 성능문제를 외부로 드러내어 원인을 추론하고 성능문제를 해결할 수 있다. - 대기이벤트들의 대한 치밀한 분석과 내부구조에 대한 이해, 경험이 부족하다면 오판을 할 가능성도 존재한다. - OWI는 개선중이다. - OWI는 끊임없이 진보하는 방법론이다. ===== OWI 툴 ===== ==== OWI 다이나믹 뷰 ==== ^ V$EVENT_NAME | 모든 대기이벤트에 대한 참조성 정보 | ^ V$SYSTEM_EVENT | | ^ V$SESSION_EVENT | | ^ V$SESSION_WAIT | | ^ V$SESSION_WAIT_HISTORY | | ^ V$SYSTEM_WAIT_CLASS | | ^ V$SESSION_WAIT_CLASS | | ^ V$EVENT_HISTOGRAM | | ==== 기타 중요 다이나믹 뷰 ==== ^ 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 | | ^ V$LIBRARYCACHE, X$KGLLK, X$KGLPN | | ^ V$ROWCACHE, V$ROWCACHE_PARENT | | ^ V$SGASTAT | | ^ V$SEGMENT_STATISTICS | | ^ V$SESS_TIME_MODEL, V$SYS_TIME_MODEL | | ^ V$BH, X$BH | | ==== Extended SQL Trace ==== - SQL Trace 는 기본적으로 10046 진단이벤트를 통해 활성화된다. - 4가지 레벨로 제어할 수 있다. - SQL 성능진단을 위해서 SQL Trace 를 할 경우에는 반드시 레벨 12를 사용해야 한다. == == ^ 레벨 ^ 설명 ^ ^ LEVEL 1 | SQL문장의 실행정보(Parse,Execute,Fetch 단계 및 Row source operation 결과)만을 제공 | ^ LEVEL 4 | LEVEL 1 + 바인드 변수값 제공 | ^ LEVEL 8 | LEVEL 1 + 대기정보 제공 | ^ LEVEL 12 | LEVEL 4 + LEVEL 8 \\ SQL 문장의 실행정보와 바인드 변수 값, 대기정보를 제공 | === 10046 진단이벤트 활성화 방법 === - 현재세션에서 작업하고자 하는 경우 - dbms_system을 이용해 다른 세션에 대해 Trace를 수행하는 경우 - dbms_monitor 패키지를 이용하여 다른 세션에 대해 Trace를 수행하는 경우(10g 부터 제공) - oradebug를 이용해 다른 세션에 대해 Trace를 수행하는 경우 ==== oradebug 와 덤프(dump) ==== - 대기현상들을 분석하고 이해하는데 유용한 툴 - oradebug는 DBA를 위한 가장 강력한 툴 - **oradebug를 반드시 sysdba 권한으로 실행**하여야 한다. - oradebug 명령어 확인(help) $ sqlplus / as sysdba SQL> oradebug help - 더 자세한 정보는 [[dbms:oracle:admin:oradebug | oradebug 사용법 ]]를 보면 된다. ==== AWR(Automatic Workload Repository) ==== - 10g 부터 도입된 성능이력관리 기능이다. - 수집된 데이터는 **DBA_HIST_XXX 뷰**를 통해 조회가 가능하다. === AWR에서 수집되는 데이터들 === == == | Active Session History | | 부하가 큰 문장 | | 시스템 레벨과 세션 레벨에서 Time Model 통계 | | 세그먼트와 기타 데이터베이스 객체에 대한 사용 통계치 | | V$SESSTAT, V$SYSSTAT, V$SYSTEM_EVENT, V$SESSEION_EVENT 등 | === 제한사항 === - 오라클 장애는 일반적으로 Active Session은 초당 1회 이상, Active SQL은 초당 수십 회 이상 캡쳐해서 저장할 수 있어야 한다. - AWR 은 데이터를 테이블로 저장하기 때문에 빈번한 데이터 저장이 어려울 수 있다. - AWR에서 스냅샷이 저장되는 주기가 30분인 점을 생각하면 AWR로 특정 시간대의 장애문제를 해석하는 것이 어려울 수도 있다. ===== OWI 데이타수집 ===== ==== Logoff Trigger ==== - 세션이 로그오프될때 V$SESSION_EVENT, V$SESTAT 뷰 등에 캡쳐해서 저장하는 기법 - 단순한 세션을 제외하고는 의미가 없다. ==== SQL을 이용한 주기적인 수집 ==== - 몇 분을 주기로 필요한 OWI 관련 데이터를 SQL문장을 통해 수집하는 기법 - 수집주기가 길고, 성능문제 발생시에는 SQL 문장자체가 실행되지 않을 수 있어 정애분석용으로 사용할 수 없다. ==== AWR(Automatic Workload Repository) ==== - 오라클에 의해 자동적으로 성능데이터가 관리된다. - SQL을 이용한 주기적인 수집보다는 훨씬 가볍고 안정적이지만 \\ 데이터를 저장하는 방식으로 인해 수집주기를 필요한만큼 짧게 할 수 없다. ==== DMA(Direct Memory Access) ==== - 오라클이 사용하는 SGA영역을 직접 Access 해서 필요한 데이타를 수집하는 방법 - AWR과 달리 원하는 데이터를 원하는 주기로 저장할 수 있기 때문에 가장 유연하고 강력한 기법이다. - Maxgauge 등 일부 성능 모니터링 툴에서 이 기법을 이용하여 프로그램을 제공하고 있다. ===== 기타 ===== - 추가적으로 알아야 할 내용들이다. ==== PL/SQL ==== === 아래의 패키지 사용법은 어느정도 알고 있어야 한다 === - dbms_output - dbms_rowid - dbms_job 등 ==== 스크립트들 ==== === http://asktom.oracle.com 에서 받을 수 있다. === - show_space - print_table === 기타 스크립트 === - my_sess_event.sql - show_param.sql - system_event.sql - sesstat.sql - undosize.sql