'AWR'에 해당되는 글 3건

  1. 2012.03.08 AWR report 생성 및 분석
  2. 2010.03.23 AWR - Monitoring & Tuning
  3. 2010.03.23 AWR (Automatic Workload Repository)
ORACLE/TUNING2012. 3. 8. 11:22
반응형

DBA 계정으로 sqlplus 로그인하여 실행
 
(성능통계 수집 기간 및 보관주기 보기)

select snap_interval, retention from dba_hist_wr_control;

 

(20분 간격으로 2일보관주기로 변경)

begin

   dbms_workload_repository.modify_snapshot_settings (

      interval => 20,

      retention => 2*24*60

   );

end;


* AWR snapshot 생성 (시작과 종료시 아래 처럼 실행)
- 1노드에 대해서 snapshot 됨
execute dbms_workload_repository.create_snapshot;
 
- 전체 노드에 대해서 snapshot 됨
exec sys.dbms_workload_repository.create_snapshot('ALL');
 
 
* report 출력시 (해당 결과파일 local로 받아서 *.html형식으로)
$ORACLE_HOME/rdbms/admin/awrrpt.sql 수행
   실행시 입력 값
   Enter value for report_type: text     << text format 으로 보고서 생성
   Enter value for num_days: 1  << 최근 하루 동안의 snap 조회
   Enter value for end_snap: 1271   << 09:08 ~ 14:00 구간에 대한 조회 요청
   Enter value for report_name: awrrpt_1_1266_1271.txt  << 보고서 이름 지정
 
 
* 분석 point

1.  Load Profile 분석
Snap 구간 동안의 DBMS 성능 통계를 보여준다. 기본적인 DBMS 성능의 Baseline을 제공한다.
초당 Transactions  및 SQL 호출 수 등을 통해 DBMS의 Activity 를 분석한다.
 
2.  메모리 성능 분석
Shared Pool 및 Buffer Cache의 Hit Rate 등 메모리 활용의 적절성을 분석한다.
 
3.  이벤트 분석
CPU time이 높은 비율로 유지되어야 하며 기타 I/O 를 위한 Wait이나 Lock 발생여부를 분석한다.
 
4.  TOP SQL 분석
SQL ordered by Gets 항목 분석을 통해 I/O를 많이 유발하는 Bad SQL을 찾아서 튜닝한다
==============================================================================================
==============================================================================================
Knowledge 등록 건 (LGCNS 공공 DA 김승철 차장) ==========================================================
 
오라클10g의 AWR기능을 활용하면 튜닝에 필요한 많은 정보를 얻을 수 있다.
MMON 백그라운드 프로세스와 여러 개의 슬레이브 프로세스를 통해 자동으로 매 시간마다 스냅샷 정보를 수집한다.
수집된 데이타는 7일 후 자동으로 삭제된다. 스냅샷 주기와 보관 주기는 사용자에 의해 설정 가능하다.

1. AWRRPT에서 SNAP_ID와 SQL_ID로 바인드 변수 찾기
   -------------------------------------------------

   1.1 awrrpt의 레포트파일의 SNAP_ID 및 SQL_ID를 활용
         SQL> select *
                from dba_hist_sqlbind
               where SNAP_ID=2099
                 and SQL_ID='92rpbbrrb3bqj';

         SQL> select *
                from dba_hist_sqlbind
               where SNAP_ID between 18797 and 18814  -- between [Begin Snap] and [End Snap]
                 and SQL_ID='1g8h29fbpv5yu';

   1.2 SQL_ID알고 최근 SNAP_ID를 구하여 활용 
        SQL> select max(SNAP_ID) from dba_hist_sqlbind where SQL_ID='92rpbbrrb3bqj';
                 2099

        SQL> select *
               from dba_hist_sqlbind
              where SNAP_ID=2099
                and SQL_ID='92rpbbrrb3bqj';


2. 실행중인 SQL을 SID로 찾아 PLAN 보기
   ------------------------------------

   SQL> select 'select * from TABLE(dbms_xplan.display_cursor('''||sql_id||''','||SQL_CHILD_NUMBER||')) ;'
          from  v$session 
         where  sid = 4194;

   결과 : select * from TABLE(dbms_xplan.display_cursor('bqxzbkrtt26gj',0)) ; 

   -- 결과를 실행
   SQL> select * from TABLE(dbms_xplan.display_cursor('bqxzbkrtt26gj',0)) ;                                       


3. V$SESSION의 SQL_HASH_VALUE로 SQL 찾기
   --------------------------------------------

   SQL> select sql_text
          from v$sqltext
         where hash_value = 2555467871
         order by piece;


4. /*+ gather_plan_statistics */ 힌트와 dbms_xplan.display_cursor 패키지를 이용한 플랜보기
   ---------------------------------------------------------------------------------------

   - statistics_level = all 인 경우에는 Hint 불필요
   - SQL 실행 시 Row Source 레벨의 통계 정보 수집
   - E-Rows(예측 Row 수)와 A-Rows(실제 Row 수)의 비교를 통해 통계정보의 오류를 파악할 수 있음
   - Optimizer가 얼마나 합리적인 실행 계획을 세우느냐는 Cardinality, 즉 예상 Row수의 정확성에 달려 있음

   SQL> select /*+ gather_plan_statistics */ * from tb_test where id < 1000;
   또는
   SQL> alter session statistics_level = ALL;
   SQL> select * from tb_test where id < 1000; 

   SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
   ---------------------------------------------------------------------------------------------------------
   | Id  | Operation                   | Name            | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
   ---------------------------------------------------------------------------------------------------------
   |   1 |  TABLE ACCESS BY INDEX ROWID|  TB_TEST        |      1 |      1 |   1000 |00:00:00.01 |     140 |
   |*  2 |   INDEX RANGE SCAN          |  TB_TEST_IDX    |      1 |      1 |   1000 |00:00:00.01 |      70 |
               :
   - 주요 항목 설명
     . E-Rows: 예측 Row 수
     . A-Rows: 실제 Row 수
     . A-Time: 실제 소요 시간
     . Buffers: Logical Reads

참고) dbms_xplan.display_cursor(sql_id, child_number, format)의 format 종류
   - Basic
   - Typical
   - Outline
   - All
   - Advanced
   * allstats last
   * +peeked_binds : 예) dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +peeked_binds');


5. 스냅샷 직접 생성(수동)
   ---------------------

    SQL> execute dbms_workload_repository.create_snapshot;

    SQL> SELECT snap_id, begin_interval_time begin, end_interval_time end FROM SYS.DBA_HIST_SNAPSHOT;

    SQL> SELECT snap_id, startup_time FROM dba_hist_snapshot ORDER BY 1,2;

             SNAP_ID    STARTUP_TIME
             ---------- --------------------
             10         2007/12/19 10:27:32.000 <-- 삭제할 첫번째 스냅샷
             11         2007/12/19 10:27:32.000
             12         2007/12/19 10:27:32.000
             13         2007/12/19 10:27:32.000
             14         2007/12/19 10:27:32.000
             15         2007/12/19 10:27:32.000 <-- 삭제할 마지막 스냅샷
             16         2007/12/19 10:27:32.000
             17         2007/12/19 10:27:32.000

             12 rows selected.


6. SNAP_ID 범위 지정하여 삭제
   --------------------------

    SQL> exec dbms_workload_repository.drop_snapshot_range(10, 15);


7. AWR 스냅샷 주기와 보관 주기 설정
   --------------------------------

   1] 스냅샷주기(1시간,default) 및 보관주기(7일,default) 조회
       SQL> SELECT snap_interval , retention FROM dba_hist_wr_control;
            SNAP_INTERVAL              RETENTION 
            -------------------------- ---------------------------
            +00000 01:00:00.0          +00007 00:00:00.0 

   2] 스냅샷주기(10분) 및 보관주기(15일)을 변경
       SQL> execute DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
                                                  (interval  => 10,        -- 분단위
                                                   retention => 15*24*60); -- 15일

   3] 스냅샷주기(10분) 및 보관주기(15일) 조회
       SQL> SELECT snap_interval , retention FROM dba_hist_wr_control;
            SNAP_INTERVAL              RETENTION 
            -------------------------- ---------------------------
            +00000 00:10:00.0          +00015 00:00:00.0

8. AWR Report 생성
   ----------------

   과거의 DB의 상태를 awrrpt를 이용하여 확인할 수 있다.

   SQL> connect / as sysdba

   SQL> @?/rdbms/admin/awrrpt.sql 실행

            :

   Enter value for report_type: html 입력

            :

   Enter value for num_days: 8 입력

   Listing the last 8 days of Completed Snapshots

                                                                                    Snap
   Instance     DB Name        Snap Id    Snap Started         Level
   ------------ ------------ --------- ------------------ -----
   DB_SID       DB_NAME       20159 01 Aug 2008 00:00         1
                                          20160 01 Aug 2008 01:00      1
                                          20161 01 Aug 2008 02:00      1
                                          20162 01 Aug 2008 03:00      1
                                          20163 01 Aug 2008 04:00      1
                                          20164 01 Aug 2008 05:00      1
                                          20165 01 Aug 2008 06:00      1
                                          20166 01 Aug 2008 07:00      1
                                          20167 01 Aug 2008 08:00      1
                                          20168 01 Aug 2008 09:00      1
                                               :

                                          20333 08 Aug 2008 06:00      1
                                          20334 08 Aug 2008 07:00      1
                                          20335 08 Aug 2008 08:00      1
                                          20336 08 Aug 2008 09:00      1  --- begin
                                          20337 08 Aug 2008 10:00      1
                                          20338 08 Aug 2008 11:00      1
                                          20339 08 Aug 2008 12:00      1  --- end
                                          20340 08 Aug 2008 13:00      1
                                          20341 08 Aug 2008 14:00      1
                                          20342 08 Aug 2008 15:00      1

   Enter value for begin_snap: 20336 입력 --- begin

   Enter value for end_snap   : 20339 입력  --- end


   Enter value for report_name: awrrpt_20080808_09-12_DB_SID.html 입력

    awrrpt_20080808_09-12_DB_SID.html 파일을 ftp로 pc로 다운로드 받은 후
   열어서 SQL ordered by Elapsed Time 항목 등을 확인해 보시면 된다.

반응형
Posted by [PineTree]
ORACLE/TUNING2010. 3. 23. 13:47
반응형
AWR (Automatic Workload Repository)
- SYSAUX Tablespace (SYS소유) 에 존재하는 Tables
- Snapshot 을 저장
- 기본 7 일간 저장 (DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE을 통해 Baseline 화 하여 삭제안되게 할 수 있다.)
- MMON(기본 1시간단위 수집) 에 의해 생성된 Snapshot 을 DMA 방식으로 메모리의 내용을 저장한다
- 저장된 결과를 ADDM(분석) 또는 DBA 가 분석한다
- Performance(v$) 관련 Data들이 저장
- Infra Structure 역할을 한다.
- 문제확인과 자체튜닝을 가능케해준다

cf.
Baseline : Database 가 정상작동하고 있을때의 통계값 (문제발생시 비교를 위한값)


ADDM (Automatic Database Diagnostic Monitor)
- 분석 후, 기본적인 이상 발생시 알려주는 역할
- 분석에 관하여 핵심적이고 본질적인 역할 수행
- DBA 의 분석작업을 빠르게 제공 (분석, 도움)
- 다른 Advisory 와 달리 자동으로 실행된 다


ADDM 과 MMON
동작 : MMON 이 Snapshot 을 생성한 후 ADDM 에 알리면 ADDM 은 가장 최근의 Snapshot 과 비교하여 이상여부를 분석하여 화면으로 출력하고(EM) AWR 에 저장(ADDM Result) 한다


Alert 의 종류
1. Tool 이 발생시킨 Alert
2. DBA 가 설정한 값에 의해 발생한 Server Alert
1. Metric-Based Alert : DBA_OUTSTANDING_ALERTS 에 기록후 해결되면 지워진다. 모든 이전 기록은 DBA_ALERT_HISTORY 에 남는다
2. Event-Based Alert : 즉시 DBA_ALERT_HISTORY에 기록


Server Alerts
동작 : 문제 확인시 AWR 에 저장(ADDM Result) 하면서 Server Alerts Queue 에 작업을 넣고 화면으로 출력한다(EM)
- DBA 가 설정한 (Metrics 의 설정값) 특정상황 발생시 서버측에서 즉각적으로 경고
- EM 및 DBMS_SERVER_ALERTS Package 사용하여 수동 설정
- Resumable Session Suspended, Snapshot Too Old 같은 상황에 대해 미리 경고를 받을 수 있다.


Advisory Framework
<Advisory Framework>
- Performance 분석 및 Failure(11g) 에 대한 도움말 기능
- ADDM 만 자동으로 실행된다
- DBMS_ADVISOR Package 를 사용


Automated Tasks
- 주기적인 (B&R 과 같은) 작업을 자동화 하는 Job으로 생성하여 수행
- DBMS_SCHEDULER Package 사용


Data Warehouse of The Database
- Automatic Collection of Important Statistics
- Direct Memory Access : Oracle Engine 이 아닌 Memory 에 직접적으로 접근


Statistics
Optimizer Stats (일부 dba_)
- 관리자가 프로시저를 사용해 수동으로 통계를 집계해야 한다
- DBMS_STATS package 의 사용으로 통계 수집
   참조: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/toc.htm

Performance Stats (v$)

- Server 의 수행 내역에 관한 통계들. 관리하지 않아도 자동으로 변경된다.
- 문제발생시 우선 확인해야하는 부분
- v$ 뷰를 기초로 하기에, Startup 이래로 누적된 값만을 볼 수 있으므로 특정상황에 대한 문제를 발견 할 수 없다
- Shutdown 시 정보가 없어진다
- (1)누적 (2)휘발의 위험을 위해 Snapshot 을 남긴다
Snapshot 을 만드는 방법
1. utlbstat.sql + utlestat.sql -> report.txt $ORACLE_HOME/rdbms/admin
2. statspack / sp*.sql
3. AWR (+MMON + ADDM)


Metric

- 측정단위. 통계값의 2차 가공한 정보
- 내부 Component 들이 어떤 결과를 내리기 위한 값 (기본적으로 관리자의 관리를 위한 Data 가 아니다)
- Ex] Statistic 가 총 Commit 이 발생한 횟수 라면 Metric 은 초(시간)당 Commit 의 횟수 일 수 있다.


Tuning
SQL Tuning
특정 SQL 이 처리되는 가장 좋은 경로를 알고 있는 상태에서
Optimizer 가 특정 SQL 의 최적의 실행계획을 선택하도록 유도하는 과정
유도 방법
- Optimizer Stats 관리
- Index 의 적절한 조절
- 대안적 저장구조
- Parameter 값 변경 (PGA 크기조정 etc...)
- SQL 변환
- Hint 의 사용
- Etc...

Server Tuning
진단 결과 해석할 능력이 있는 상태에서
목표에 맞는 Performance 가 발휘되도록 System 의 여러 요소를 조절해가는 과정


Statistic Levels
- BASIC : Snapshot 같은 정보는 수집하지 않는다
- TYPICAL : Default
- ALL : 시스템에 부담. Snapshot + SQL Tuning 정보까지도 포함
반응형

'ORACLE > TUNING' 카테고리의 다른 글

DBMS_XPLAN - 1.실행계획  (0) 2010.05.24
HWM(High Water Mark)란?  (0) 2010.03.31
AWR (Automatic Workload Repository)  (0) 2010.03.23
Statspack 생성/삭제/Sanpshot생성  (0) 2010.03.23
[Oracle 물리설계] 제5부 영역감시  (0) 2010.02.11
Posted by [PineTree]
ORACLE/TUNING2010. 3. 23. 13:41
반응형
출처 : http://www.urbantree.wo.tc/entry/6-Using-Automatic-Workload-Repository

AWR (Automatic Workload Repository)

- SYS 소유
- SYSAUX TS 에 존재
- MMON에 의해 자동으로 60분마다 수집 / 7일간 유지 (Default)
- MMON 에 의해 자동으로 삭제
- Snapshot : Set of performance statistics captured at a certain time
- Baseline : Set of Snapshots
AWR 수록 내용
- Base Statistics
- Metrics
- Active Session History
- Advisor Results
- Snapshot Statistics
- Database Feature Usage


Script
- awrrpt.sql : AWR 관련 Report 생성 Script. (분석은 사용자의 몫)
- awrddrpt.sql (기간비교) : AWR 관련 Report 생성 Script (분석은 사용자의 몫)
- ashrpt.sql : ASH 관련 Report 생성 Script (분석은 사용자의 몫)
- addmrpt.sql : ADDM 관련 Report 생성 Script 분석 및 권고안까지 포함


ADDM Attributes
- STATISTICS_LEVEL = TYPICAL or ALL (Basic으로 설정시 자동 실행 안된다)


ADDM Report
- 하나의 Report 생성

SQL> @?/rdbms/admin/addmrpt

Enter value for begin_snap: 8

Enter value for end_snap: 10

Enter value for report_name:

Generating the ADDM report for this analysis ...

- 기존의 작업물들을 바탕으로 Report 생성

SELECT dbms_advisor.GET_TASK_REPORT(task_name)

FROM   dba_advisor_tasks

WHERE  task_id = (

       SELECT max(t.task_id)

       FROM   dba_advisor_tasks t,

              dba_advisor_log l

       WHERE  t.task_id = l.task_id   AND

              t.advisor_name = 'ADDM' AND

              l.status = 'COMPLETED');



ASH (Active Session History)
- V$SESSION 의 내용중 Active Session 의 내용들을 1초 단위로 ASH Buffer로 복사
- ASH Buffer 는 Shared Pool 안에 존재
- ASH Buffer 에는 V$ACTIVE_SESSION_HISTORY View 가 존재
- CPU 당 2mb 의 크기 사용
- ASH 는 Lock 에 의한 보호 메커니즘이 없으므로 읽기 일관성 보장 안된다.
- V$ACTIVE_SESSION_HISTORY 의 내용은 일정크기를 순환해서 쓰는 Rollng Buffer 방식
- V$ACTIVE_SESSION_HISTORY 의 내용을 Direct Path 방식으로 AWR로 내려쓴다
- AWR 로 내려쓰여진 정보들은 DBA_HIST_ACTIVE_SESSION_HISTORY, WRH$_ACTIVE_SESSION_HISTORY 에서 확인가능
관련 Process
▒ MMON
- 시간이 다 되었을 경우(1시간) 1/10개 Sampling 하여 AWR 내려쓴다
▒ MMNL
- V$SESSION 의 내용을 ASH Buffer 로 채우는 역할
- ASH Buffer 의 내용이 1/3이상 찰 경우 1/10 Sampling 하여 AWR 로 내려쓴다


Oradebug 를 이용한 ASH Dump
SQL> oradebug setmypid
SQL> oradebug dump ashdump 10
SQL> oradebug tracefile_name


V$ACTIVE_SESSION_HISTORY 의 해석


SELECT   sql_id, count(*),
         round(count(*)/sum(count(*)) over (), 2)
pctload

FROM     v$active_session_history

WHERE    sample_time > sysdate -1/24/60 and

         session_type <> 'BACKGROUND'

GROUP BY sql_id

ORDER BY count(*) desc;


최근 1분안에 수행한 SQL 문중 가장많은 시간(n초)을 사용한 sql_id 와 count(*)[횟수, 시간]

ASH 에서 Count 한 값은 횟수이면서 동시에 시간(n초) 로 해석할 수 있다(Sampling의 단위가 1초이므로)


ASH Report Structure
- Top Events
- Load Profile
- Top SQL
- Top Session
- Top Objects/File/Latches
- Activity Over Time
▒ Slot Count : 1분간 Active Session
▒ Event Count : Sloct Count 별 상위 3지표
반응형

'ORACLE > TUNING' 카테고리의 다른 글

HWM(High Water Mark)란?  (0) 2010.03.31
AWR - Monitoring & Tuning  (0) 2010.03.23
Statspack 생성/삭제/Sanpshot생성  (0) 2010.03.23
[Oracle 물리설계] 제5부 영역감시  (0) 2010.02.11
Oracle Hidden Parameter 란  (0) 2010.01.26
Posted by [PineTree]