오라클

[펌] 10g 자동화 통계정보 수집에 관하여

끄적끄적 2009. 3. 12. 18:43


1. 대량의 데이터 로드 작업 수행후에는 DBA가 작업 후 바로 통계작업을 실시해야 최신의 통계정보를 유지할 수 있다.

(바로 통계작업을 해도 바로 적용되지 않으니 안심해도 된다. http://blog.naver.com/ukja/120045329315 참조하삼)

 

2. 당연하겠지만 external table은 통계정보 대상이 아니다.

 

##### 통계 생성이 필요한 부분은 크게 4가지로 구분할 수 있다. #####

#####                    1.System Statistics                                #####

#####                    2.Fixed Objects Statistics                       #####

#####                    3.Dictionary Statistics                            #####

#####                    4.User Table Statistics                          #####

 

3. 시스템 통계는 자동화 되지 않는다. DBA가 직접 수행해야 한다.

 시스템 통계란 system hardware의 I/O, CPU의 특성을 분석하여 optimizer가 임의의 SQL에 대한 실행 계획을 수립 할 때

 이를 기반으로 계산하기 때문에 optimizer가 더욱더 똑똑해 질 수 있는 기반을 제공한다.

 예)  exec dbms_stats.gather_system_stats;

시스템 통계의 사용방법에 대해서는 다음 글을 참고하기 바랍니다. http://blog.naver.com/sungeunn/120050297742

 

4. fixed object에 대한 통계수집도 자동화되지 않는다.

   (v$view와 같은 dynamic performance view는 자동화 대상이 아니다.)

   Fixed Objects Statistics 무엇인가?

   fixed view (x$ tables) 에 대한 통계를 뜻하며 database의 activity를 기록하게 되기때문에 database가 일상적인 운영 상태일때

   fixed view (x$ tables) 에 대한 통계를 생성하는 것이 좋습니다. 보통 V$ view를 질의하는 사용자 query에  필요함

 

  * fixed object 통계 생성방법

  1) fixed object 통계정보를 저장 & 관리할 table을 생성한다.

  exec dbms_stats.create_stat_table(owname=>'SYSTEM',stattab=>'mystats');

 

  2) fixed objects 통계를 수집한다.

  exec dbms_stats.gather_fixed_objects_stats(stattab=>'mystats',statid=>'WEEK',statown=>'SYSTEM');

 

  3) fixed objects 통계정보를 load한다.

  exec dbms_stats.import_fixed_objects_stats(stattab=>'mystats',statid=>'WEEK');

 

5. Dictionary Statistics

   sys, system schema의 object들의 통계를 수집하는 것이다.

 

  * Dictionary Statistics 통계 생성방법

  1) Dictionary 통계정보를 저장 & 관리할 table을 생성한다.

  exec dbms_stats.create_stat_table(owname=>'SYSTEM',stattab=>'mystats');

 

  2) Dictionary 통계를 수집한다.

  exec dbms_stats.gather_dictionary_stats(stattab=>'mystats',statid=>'DAY',statown=>'SYSTEM');

 

  3) Dictionary 통계정보를 load한다.

  exec dbms_stats.import_dictionary_stats(stattab=>'mystats',statid=>'DAY');

 

6. User Table Statistics

   사용자의 Object에 대해 통계를 수집하는 것으로

   User Table Statistics는 10g의 GATHER_STATS_JOB을 통해 자동으로 통계 수집이 된다.

   요즘 현업의 추세는 자동화된 통계를 disable 시키고 있다.

 

7. 대량의 데이터를  insert하고 delete하는 등등 항상 full table scan이 필요한 테이블 등에 대해서는

   자동으로 table통계를 수집하는것이 오히려 악영향을 끼친다.

   때문에 이러한 테이블들은 exec dbms_stats.lock_table_stats('SCOTT','EMP'); 이런 프로시져로... locking을 하여

   자동 통계수집 대상 테이블에서 제외 할 수 있다.

 

   * 테이블 및 사용자별 자동 통계 중지하기

   EXECUTE DBMS_STATS.LOCK_TABLE_STATS ('owner name', 'table name');
   EXECUTE DBMS_STATS.LOCK_SCHEMA_STATS ('owner name');

 

   * LOCK된 table확인하기

   SELECT owner, table_name, stattype_locked
   FROM dba_tab_statistics
   where stattype_locked is not null;

 

8. 10g부터 데이터 변동을 추정하는 table 모니터링은 자동화 되었다.

    alter table과 같은 명령어로 table 모니터링을 제어 할 수 있지만.. 이것은 명령만 유효할뿐..

    실제 내부적으로는 아무런 영향을 주지 않는다.

    Note:295249.1 <--- 참조하세요^^

 

9. 10g의 자동화된 통계수집 기능 disable 하는 방법

    gather_stats_job을 disable 시키고 statistics_level 파라메터 값을 basic으로 바꾸면 완벽하게 자동통계 기능을 끄는것이다.

 

    * 자동화 통계수집 기능 disable 하는 방법

    SQL> exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

   

    * 자동화 통계 수집 기능이 Disable되었는지 확인한다.

    col SCHEDULE_NAME for a40
    select job_name, enabled, SCHEDULE_NAME, STATE from dba_SCHEDULER_JOBs ;

 

    JOB_NAME                         ENABL   SCHEDULE_NAME                       STATE
------------------------------ ----- ------------------------------      -------------------
AUTO_SPACE_ADVISOR_JOB     TRUE   MAINTENANCE_WINDOW_GROUP     SCHEDULED
GATHER_STATS_JOB               FALSE  MAINTENANCE_WINDOW_GROUP      DISABLED
FGR$AUTOPURGE_JOB            FALSE                                                       DISABLED
PURGE_LOG                             TRUE  DAILY_PURGE_SCHEDULE               SCHEDULED

 

10. 통계정보를 수집할때 dbms_stats로 수집을 하면 오라클은 그 정보들의 미래의 사용 가능성을 염두해두고

   old_version으로 관리를 한다. 이런것들은 나중에 필요하면 dbms_stats.restore_*_stats로 과거 통계를 복원 할 수 있다.

   그러나 analyze command로 통계를 수집하면 old version으로 보존되지 않는다.

   통계정보 유지기간 확인및 설정은 다음과 같이 한다.

 

   유지기간 확인

   select dbms_stats.get_stats_history_retention from dual;

   유지기간 변경

   exec dbms_stats.alter_stats_history_retention(61);


Note:236935.1 <--- analyze와 dbms_stats의 차이점 참조하세요^^

 

11. 자동화된 통계정보는 AWR에 저장되며 AWR은 SYSAUX에 위치한다.

 

12. undo와 관련하여 AWR에 저장된 통계정보를 통해 오라클 스스로 얼마나 많은 수의 undo segment를 온라인 할것인지

     바로 결정할 수 있기때문에 Fast Ramp-Up이 가능하다.

 

13. 오라클 10g가 취합한 통계들은 SGA에 저장되어 v$view로 접근할 수 있으며 이 통계들은 주기적으로

     10g의 새로운 background processes인 MMON에 의해 스냅샷 형태로 AWR에 저장된다.

     기본 주기는 60분마다 스냅샷이 생성된다.

 

14. AWR 리포트가 보고 싶으면 $ORACLE_HOME/rdbms/admin/awrrpt.sql 을 돌리면 된다.

 

dbms_stats에 대해 더 알기 원하시면 다음 글을 참고 하세요

http://blog.naver.com/sungeunn/120051614586

http://blog.naver.com/sungeunn/120051616622

 

요즘 현업에서의 일반적인 추세는 10g의 자동화된 통계수집 기능을 사용하지 않는다.

이런 편리한 기능을 쓰지 않는 가장 큰 이유는 자동화 통계수집 기능을 이용하면 통계들을 컨트롤 하기가 어려워지기 때문이다. 많은 고수들이 자동화된 통계 수집 기능을 disable 할것을 권고하고 있다.



반응형