'Analyze'에 해당되는 글 2건

  1. 2010.11.23 analyze 와 dbms_stats의 차이점
  2. 2007.08.02 [oracle 10g] 통계 수집
ORACLE/ADMIN2010. 11. 23. 18:12
반응형

-Analyze는 Serial Statistics Gathering 기능만 있는 반면, dbms_stats는 Parallel Gathering기능이있다.

-Analyze는 파티션의 통계정보를 각 파티션 테이블과 인덱스에 대해서 수집하고,

Golbal Statistics는 파티션 정보를 가지고 계산하므로, 부정확할 수 있다.

그러므로 파티션 또는 서브파티션이 있는 객체에는 DBMS_STATS을 사용 하여야 한다.

-DBMS_STATS는 전체 클러스터에 대해서는 통계정보를 수집하지 않는다. 그러므로 Analyze를 사용한다.

-DBMS_STATS는 CBO와 관련된 통계정보만을 수집한다.

즉, 테이블의EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT 등은 수집되지 않는다.

-DBMS_STATS는 사용자가 지정한 통계정보 테이블에 수집된 통계정보를 저장할수있고,

딕셔너리로 각 컬럼, 테이블, 인덱스, 스키마등을 반영 할 수 있다.

-DBMS_STATS는 IMPORT/EXPORT 기능 및 추가적인 기능이 많다.

이 기능을 이용하여 운영 DB의 통계정보를 개발장비의 통계정보로

복사할 수 있으므로 개발장비의 팰린을 운영장비와 같게 만들 수 있다.(메뉴얼 참조)

 

Optimizer statistics 생성은 시간과 자원이 많이 드는 작업입니다.

Optimizer를 지원하기 위한 통계 생성 작업에서 Optimizer가 Cost 계산에 고려하지 않는

정보를 만들기 위해서 시간과 자언을 사용할 필요는 없을 것입니다.

 

그래서 아래 내용이 피룡하다면 여전히 analyze 명령을 사용해야 합니다.

 

ANALYZE 명령

 

analyze 명령은 DBMS_STATS 패키지를 사용하기 전에 사용했던 명령으로, 유사한 통계자료를 수집하는데

사용된다. DBMS_STATS 패키지가 통계 자료 수집에 더 우수하기 때문에 오라클은 패키지의 사용을 권장하지만,

DBMS_STATS 패키지로 수ㅡ집할 수 없는 통계 자료는 다음과 같습니다.

 

- VALIDATE 또는 LIST CHAINED ROWS 절의 사용

- 통계 자료 예측시 행의 샘플 개수

- 프리리스트 블록 관련 정보와 같은 옵티마이저에 의해 사용되지 않는 통계 자료 수집.

 

SQL> ANALYZE TABLE table_name VALIDATE STRUCTURE;

 

test방법

 

1세션과 2세션으로 구분하여 test하면된다.

 

 1 session t1 analyze

 2 session t2 dbms_stats

SQL> create table t1 (c1 number, c2 varchar2(10), c3 varchar2(10));

테이블이 생성되었습니다.

SQL> exec p('select * from user_tables where table_name = ''T1'' ')
---------------------------------------------------
TABLE_NAME                    : T1
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      :
BLOCKS                        :
EMPTY_BLOCKS                  :
AVG_SPACE                     :
CHAIN_CNT                     :
AVG_ROW_LEN                   :
AVG_SPACE_FREELIST_BLOCKS     :
NUM_FREELIST_BLOCKS           :
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   :
LAST_ANALYZED                 :
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : NO
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------

PL/SQL procedure successfully completed.
SQL> analyze table t1 compute statistics;

Table analyzed.

SQL> exec p('select * from user_tables where table_name = ''T1'' ')
---------------------------------------------------
TABLE_NAME                    : T1
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      : 0
BLOCKS                        : 0
EMPTY_BLOCKS                  : 7
AVG_SPACE                     : 0
CHAIN_CNT                     : 0
AVG_ROW_LEN                   : 0
AVG_SPACE_FREELIST_BLOCKS     : 0
NUM_FREELIST_BLOCKS           : 0
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   : 0
LAST_ANALYZED                 : 23-NOV-2010 16:27:57
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : NO
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------

 

PL/SQL procedure successfully completed.

SQL> insert into t1 select level, 'test1', 'test2' from dual connect by level <= 1000;

1000 rows created.
SQL> analyze table t1 compute statistics;

Table analyzed.

SQL> exec p('select * from user_tables where table_name = ''T1'' ')
---------------------------------------------------
TABLE_NAME                    : T1
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      : 1000
BLOCKS                        : 3
EMPTY_BLOCKS                  : 4
AVG_SPACE                     : 1114
CHAIN_CNT                     : 0
AVG_ROW_LEN                   : 19
AVG_SPACE_FREELIST_BLOCKS     : 1698
NUM_FREELIST_BLOCKS           : 1
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   : 1000
LAST_ANALYZED                 : 23-NOV-2010 16:30:07
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : NO
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------

PL/SQL procedure successfully completed.

 SQL> create table t2(c1 number, c2 varchar2(10), c3 varchar2(10));

Table created.

SQL> exec p('select * from user_tables where table_name = ''T2'' ')
---------------------------------------------------
TABLE_NAME                    : T2
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      :
BLOCKS                        :
EMPTY_BLOCKS                  :
AVG_SPACE                     :
CHAIN_CNT                     :
AVG_ROW_LEN                   :
AVG_SPACE_FREELIST_BLOCKS     :
NUM_FREELIST_BLOCKS           :
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   :
LAST_ANALYZED                 :
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : NO
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------


PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats(user,'T2')

PL/SQL procedure successfully completed.

SQL> exec p('select * from user_tables where table_name = ''T2'' ')
---------------------------------------------------
TABLE_NAME                    : T2
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      : 0
BLOCKS                        : 0
EMPTY_BLOCKS                  : 0
AVG_SPACE                     : 0
CHAIN_CNT                     : 0
AVG_ROW_LEN                   : 0
AVG_SPACE_FREELIST_BLOCKS     : 0
NUM_FREELIST_BLOCKS           : 0
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   : 0
LAST_ANALYZED                 : 23-NOV-2010 16:28:36
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : YES
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------

PL/SQL procedure successfully completed.

SQL> insert into t2 select level, 'test1', 'test2' from dual connect by level <= 1000;

1000 rows created.

SQL> exec dbms_stats.gather_table_stats(user,'T2')

PL/SQL procedure successfully completed.

SQL> exec p('select * from user_tables where table_name = ''T2'' ')
---------------------------------------------------
TABLE_NAME                    : T2
TABLESPACE_NAME               : SYSTEM
CLUSTER_NAME                  :
IOT_NAME                      :
STATUS                        : VALID
PCT_FREE                      : 10
PCT_USED                      : 40
INI_TRANS                     : 1
MAX_TRANS                     : 255
INITIAL_EXTENT                : 65536
NEXT_EXTENT                   :
MIN_EXTENTS                   : 1
MAX_EXTENTS                   : 2147483645
PCT_INCREASE                  :
FREELISTS                     : 1
FREELIST_GROUPS               : 1
LOGGING                       : YES
BACKED_UP                     : N
NUM_ROWS                      : 1000
BLOCKS                        : 3
EMPTY_BLOCKS                  : 0
AVG_SPACE                     : 0
CHAIN_CNT                     : 0
AVG_ROW_LEN                   : 15
AVG_SPACE_FREELIST_BLOCKS     : 0
NUM_FREELIST_BLOCKS           : 0
DEGREE                        :          1
INSTANCES                     :          1
CACHE                         :     N
TABLE_LOCK                    : ENABLED
SAMPLE_SIZE                   : 1000
LAST_ANALYZED                 : 23-NOV-2010 16:30:39
PARTITIONED                   : NO
IOT_TYPE                      :
TEMPORARY                     : N
SECONDARY                     : N
NESTED                        : NO
BUFFER_POOL                   : DEFAULT
ROW_MOVEMENT                  : DISABLED
GLOBAL_STATS                  : YES
USER_STATS                    : NO
DURATION                      :
SKIP_CORRUPT                  : DISABLED
MONITORING                    : YES
CLUSTER_OWNER                 :
DEPENDENCIES                  : DISABLED
COMPRESSION                   : DISABLED
DROPPED                       : NO
---------------------------------------------------

PL/SQL procedure successfully completed.

 

 위 결과와 같이 analyze 와 dbms_stats의 차이는

 EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_SPACE_FREELIST_BLOCKS, NUM_FREELIST_BLOCKS들을

수집하느냐 안하느냐를 볼수있다.

그리고 AVG_ROW_LEN값이 틀려지고 AVG_ROW_LEN yes냐 no의 차이도있다.

 


반응형
Posted by [PineTree]
ORACLE/10G2007. 8. 2. 20:12
반응형
[oracle 10g] 통계 수집 DB

 

* 데이터 딕셔러니 통계 수집

  - 통계 자료 수집 프로시저

    + dbms_stats.gather_schema_stats

    + dbms_stats.gather_database_stats

      -> 이전 버전에도 존재하는 프로시저이나 통계자료수집은 10G에서 추가 되었다.

  - 데이터 딕셔러리의 보다 자세한 분석

    + dbms_stats.gather_dictionary_stats

  - 데이터 딕셔러리 통계자료 삭제

    + dbms_stats.delete_diciionary_stats

  - SYSDBA권한 또는 analyze any dictionary권한이 있어여 사용가능

  - 고정된 테이블 통계 수집하기 : gather_fixed 파라메터를 TRUE로 설정 한다.

  - 고정된 객체에 대한 자료 수집, 삭제

    + dbms_stats.gather_fixed_objects_stats : 수집

    + dbms_stata.delete_fixed_objects_stats : 삭제 

반응형
Posted by [PineTree]