본문 바로가기

빅데이터과정/WORKSHOP 1

#22_140714_WSHOP_SNAPSHOT

728x90
# SNAPSHOT




1. snapshot 을 수동으로 하는 명령어
exec dbms_workload_repository.create_snapshot;
@?/rdbms/admin/awrrpt.sql

2. 악성 SQL 관리를 위해서 해야할 일
개발자 : 악성 SQL을 작성해서는 안된다
DBA : 옵티마이저 테이블 통계정보를 잘 관리해야 한다

3. snapshot을 자동으로 하는 방법과 수동으로 하는 방법
수동 : exec dbms_workload_repository.create_snapshot;
자동(p12-10) : statistics_level = typical 또는 all 로 지정

4. statistics_level 파라미터 확인
SQL> show parameter statistics_level
baisc : 비활성화
typical : snapshot 활성화
ALL : 스냅샷에 튜닝정보를 추가함


변경 : alter system set statistics_level=all scope=both;


5. DB에 발생하는 성능상의 이슈를 확인하는 방법
오라클에서 제공하는 3가지 레포트를 이용하면 된다
AWR report
1) 스크립트 : @?/rdbms/admin/awrrpt.sql  (sysaux 에 존재함)
2) 특정 구간에 발생한 악성 SQL과 대기 이벤트를 확인할 때 사용
3) 즉 전반적인 성능상의 이슈를 확인하고자 할 때 보는 레포트
ADDM report
1) 스크립트 : @?/rdbms/admin/addmrpt.sql
2) 해결방법(solution)을 오라클이 알려줌
ASH report
스크립트 : @?/rdbms/admin/ashrpt.sql

6. AWR 이란
 메모리의 성능정보를 기본적으로 한시간에 한번씩 수집해서 저장해놓은 저장소
AWR은 sysaux 테이블 스패이스에 저장되어 있다
AWR에 들어있는 성능정보는 8일간 저장된다


오라클 백그라운드 프로세서 MMON(Memory Moniotr) process는 한시간에 한번씩 메모리의 상태를 수집한다




문제125. 30분에 한번씩 자동으로 사진을 찍게 하고 싶고 30일동안 성능정보를 저장하게 하고 싶다면?

exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention =>30*24*60)
최대 10분까지 줄일 수 있다
retention 은 분단위 : 30일 = 30*24*60 

SQL> exec print_table('select * from dba_hist_wr_control');
-----------------
DBID                          : 3193357653
SNAP_INTERVAL                 : +00000 00:30:00.0
RETENTION                     : +00030 00:00:00.0
TOPNSQL                       : DEFAULT
-----------------




문제126. statistics_level 파라미터가 무엇으로 셋팅되어있는지 확인하시오

SQL> show parameter statistics_level

statistics_level                                                                 string
TYPICAL
baisc : 비활성화
typical : snapshot 활성화
ALL : 스냅샷에 튜닝정보를 추가함




문제127. statistics_level 파라미터를 ALL로 변경하시오

SQL> alter system set statistics_level=all scope=both;
SQL> show parameter statistics_level

statistics_level                                                                 string
ALL








  • SNAPSHOT 활용 - AWR Report




select count(*)
from sales a, sales b, sales c;
위의 쿼리를 이용해서 악성SQL 생성



SQL> exec dbms_workload_repository.create_snapshot;
SQL> @?/rdbms/admin/awrrpt.sql
SQL> @?/rdbms/admin/awrrpt.sql 

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 3193357653 DBDB                1 dbdb

…………………………………………………..

Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing without
specifying a number lists all completed snapshots.

Enter value for num_days:

Listing all Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
dbdb         DBDB                 1 14 Jul 2014 14:39      1
                                  2 14 Jul 2014 14:46      1

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1
Begin Snapshot Id specified: 1

Enter value for end_snap: 2
End   Snapshot Id specified: 2

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_1_2.html.  To use this name,
press to continue, otherwise enter an alternative.

Enter value for report_name: report04.html






report4.html 파일을 열어서 SQL statistics 로 이동







SQL ordered by Elapsed Time 으로 이동











Elapsed Time을 확인해보면 맨 elapsed time 이 높은 순서대로 정렬되어 있고 악성SQL이 무엇인지 SQL Text에 나온다