■ 통계를 수동으로 수집해야 하는 시기

 

다음에 대해 수동으로 수집해야 한다.
- 휘발성 객체

- batch 처리 작업에서 수정되는 객체: 배치 처리 작업의 일부로 통계를 수집

- external table, system통계, fixed object

- 새로운 객체: 객체 생성 후 통계 수집

 

external 테이블은 샘플링이 지원되지 않아 estimate_percent 옵션을 명시적으로 null 설정해야 한다.
external 테이블에 대한 데이터 조작이 허용되지 않기에 해당 파일이 변경될 때만 통계 수집하면 충분한다.

 

■ 수동 통계 수집

dbms_stats는 optimize에 필요한 통계만 수집하고 다른 통계 수집은 하지 않는다.

- 예를 들어 테이블이라면 num_rows, 데이터가 있는 block count, 평균 행 길이는 포함되지만 체인된 row수, 평균 사용 가능 공간, 사용되지 않은 데이터 블럭 수는 미포함한다.

 

analyze문의 compute와 estimate 절은 역호환성을 위해서만 지원된다.

analyze문의 validate, list chained, free list 블록에 대한 정보 수집은 계속 사용 가능하다.

 

■ 수동 통계 수집 프로시저

-gather_index_stats
-gather_table_stats
-gather_schema_stats
-gather_dictionary_stats
-gather_database_stats
-gather_system_stats

-gather_fixed_objects_stats

 

PROCEDURE GATHER_DATABASE_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
 BLOCK_SAMPLE                   BOOLEAN                 IN     DEFAULT
 METHOD_OPT                     VARCHAR2                IN     DEFAULT
 DEGREE                         NUMBER                  IN     DEFAULT
 GRANULARITY                    VARCHAR2                IN     DEFAULT
 CASCADE                        BOOLEAN                 IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 OPTIONS                        VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 GATHER_SYS                     BOOLEAN                 IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT
 GATHER_TEMP                    BOOLEAN                 IN     DEFAULT
 GATHER_FIXED                   BOOLEAN                 IN     DEFAULT
 STATTYPE                       VARCHAR2                IN     DEFAULT
 OBJ_FILTER_LIST                OBJECTTAB               IN     DEFAULT

 

PROCEDURE GATHER_SCHEMA_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OWNNAME                        VARCHAR2                IN
 ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
 BLOCK_SAMPLE                   BOOLEAN                 IN     DEFAULT
 METHOD_OPT                     VARCHAR2                IN     DEFAULT
 DEGREE                         NUMBER                  IN     DEFAULT
 GRANULARITY                    VARCHAR2                IN     DEFAULT
 CASCADE                        BOOLEAN                 IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 OPTIONS                        VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT
 GATHER_TEMP                    BOOLEAN                 IN     DEFAULT
 GATHER_FIXED                   BOOLEAN                 IN     DEFAULT
 STATTYPE                       VARCHAR2                IN     DEFAULT
 FORCE                          BOOLEAN                 IN     DEFAULT
 OBJ_FILTER_LIST                OBJECTTAB               IN     DEFAULT

 

PROCEDURE GATHER_TABLE_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OWNNAME                        VARCHAR2                IN
 TABNAME                        VARCHAR2                IN
 PARTNAME                       VARCHAR2                IN     DEFAULT
 ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
 BLOCK_SAMPLE                   BOOLEAN                 IN     DEFAULT
 METHOD_OPT                     VARCHAR2                IN     DEFAULT
 DEGREE                         NUMBER                  IN     DEFAULT
 GRANULARITY                    VARCHAR2                IN     DEFAULT
 CASCADE                        BOOLEAN                 IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT
 STATTYPE                       VARCHAR2                IN     DEFAULT
 FORCE                          BOOLEAN                 IN     DEFAULT

 

PROCEDURE GATHER_INDEX_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OWNNAME                        VARCHAR2                IN
 INDNAME                        VARCHAR2                IN
 PARTNAME                       VARCHAR2                IN     DEFAULT
 ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 DEGREE                         NUMBER                  IN     DEFAULT
 GRANULARITY                    VARCHAR2                IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT
 STATTYPE                       VARCHAR2                IN     DEFAULT
 FORCE                          BOOLEAN                 IN     DEFAULT

 

PROCEDURE GATHER_DICTIONARY_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 COMP_ID                        VARCHAR2                IN     DEFAULT
 ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
 BLOCK_SAMPLE                   BOOLEAN                 IN     DEFAULT
 METHOD_OPT                     VARCHAR2                IN     DEFAULT
 DEGREE                         NUMBER                  IN     DEFAULT
 GRANULARITY                    VARCHAR2                IN     DEFAULT
 CASCADE                        BOOLEAN                 IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 OPTIONS                        VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT
 STATTYPE                       VARCHAR2                IN     DEFAULT
 OBJ_FILTER_LIST                OBJECTTAB               IN     DEFAULT

 

PROCEDURE GATHER_FIXED_OBJECTS_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT
 NO_INVALIDATE                  BOOLEAN                 IN     DEFAULT

 

PROCEDURE GATHER_SYSTEM_STATS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 GATHERING_MODE                 VARCHAR2                IN     DEFAULT
 INTERVAL                       NUMBER(38)              IN     DEFAULT
 STATTAB                        VARCHAR2                IN     DEFAULT
 STATID                         VARCHAR2                IN     DEFAULT
 STATOWN                        VARCHAR2                IN     DEFAULT

 

Posted by neo-orcl
,

■ 히스토그램 고려사항

-특정 열의 비대칭 정도가 높을 때 유용하다

-열의 데이터 분산이 자주 변경될 경우 해당 히스토그램을 자주 재계산해야 한다.

 

■ 히스토그램이 유용하지 않은 경우

- 열이 where나 join절에 사용되지 않을 경우

- 균등하게 분산된 열(컬럼 통계만으로 충분하다)

- pk나 uk등으로 unique한 값이 있는 = 술어

 

실질적인 성능 개선이 없다면 히스토그램을 사용하지 않아야 한다. 히스토그램 수집은 통계 수집 중 가장 Load가 높은 작업이기 때문이다.

 

※ 문자열의 처음 32바이트에 대해서만 히스토그램 데이터가 저장되므로 문자 열에는 일부 예외적인 동작이 있을 수 있다.


열에 표현식을 포함하고 있는 술어는 query 옵티마이저에서 문제(인덱스를 사용하지 못하거나)를 일으킨다.

※ function(column) = constant 형태의 술어에 대한 선택성을 계산할 때 옵티마이저는 정적 선택성 값이 1%라고 가정한다.


■히스토그램 정보 확인

dba_tab_histogram
dba_part_histogram
dba_subpart_histogram

 

1. 먼저 해당 컬럼이 히스토그램을 가지고 있는지와 종류를 확인하기 위해서 DBA_TAB_COL_STATISTICS를 조회한다.

select owner, table_name, column_name, histogram
from DBA_TAB_COL_STATISTICS
where table_name='SALES'
and column_name='PROD_ID';

 

OWNER                          TABLE_NAME                     COLUMN_NAME                    HISTOGRAM
------------------------------ ------------------------------ ------------------------------ ---------
SH                             SALES                          PROD_ID                        FREQUENCY

 

2. 히스토그램을 확인한다.

col column_name for a10
col owner for a10
col table_name for a10

select owner, table_name, column_name, endpoint_number, endpoint_value
from DBA_TAB_HISTOGRAMS
where table_name='SALES'
and column_name='PROD_ID';

 

OWNER      TABLE_NAME COLUMN_NAM ENDPOINT_NUMBER ENDPOINT_VALUE
---------- ---------- ---------- --------------- --------------
SH         SALES      PROD_ID               6002             13
SH         SALES      PROD_ID              12012             14
SH         SALES      PROD_ID              17778             15
SH         SALES      PROD_ID              24707             16
SH         SALES      PROD_ID              30867             17
SH         SALES      PROD_ID              40458             18
SH         SALES      PROD_ID              50888             19
SH         SALES      PROD_ID              61791             20
SH         SALES      PROD_ID              66996             21
SH         SALES      PROD_ID              70437             22
SH         SALES      PROD_ID              90079             23
....

Posted by neo-orcl
,

개요

 

자동 통계 수집은 gather_stats_prog 를 통해 자동화된다

 

프로시저

exec dbms_stats.set_global_prefs
exec dbms_stats.set_database_prefs
exec dbms_stats.set_schema_prefs
exec dbms_stats.set_table_prefs

 

프로시저 속성

- cascade: 인덱스에 대한 통계도 수집한다. 단, 이는 병렬화되지 않는다

- estimate_percent

통계 계산에 사용되는 행의 예측 비율(null은 모든 행을 의미)로 0.000001~100 설정 가능하다.
시스템이 자동으로 적정 샘플 크기를 결정하도록 하게 하려면 dbms_stats.auto_sample_size 사용한다.(기본값)

 

- no_invalidate

통계 수집할 테이블의 종속 커서 무효화를 제어한다.
true-종속 커서가 무효화되지 않음, false-종속 커서가 무효화됨
시스템이 무효화해야 하는 시기를 결정하도록 하려면 dbms_stats.auto_invalidate를 사용한다(기본값)

- publish

통계를 딕셔너리에 저장하거나 업데이트 할 지, pending area에 저장할 것인지 결정한다.
pending statistics 기능과 연관이 있다

 

- stale_percent: 객체 통계가 오래된 기준을 정한다. 마지막 통계 수집 이후 수정된 행의 비율이다. 기본값 10%

- degree

통계 계산에 사용되는 병렬도이다. 기본값은 null이며 이는 create table이나 alter table 문에서 degree 절로 지정된 테이블의   기본값을 사용함을 의미한다.
init parameter값을 기반으로 기본값 지정하려면 dbms_stats.default_degree 사용한다.
auto_degree 값은 병렬도를 자동 결정한다. 객체 크기에 따라 1 또는 default_degree(cpu수와 init parameter 기반하는 시스템 기본값)이다


- method_opt: 히스토그램 수집에 사용되는 sql 문자열. 기본값은 for all coluns size auto이다.

- granulity: partition 테이블에 대해 수집할 통계의 단위이다. global이거나 partition단위 일 수 있다.

- incremental

partition 테이블의 global 통계를 incremental 방식으로 수집하는데 사용한다.

 

※ 만약 테이블 단위로 수집 관련 속성을 dbms_stats.set_table_prefs 통해 설정했다면 dba_tab_stat_prefs 뷰를 사용하여 확인할 수 있다.

'Knowledge > Perfomance Tuning' 카테고리의 다른 글

수동통계수집(gathering statistics manually)  (0) 2015.12.29
histogram 고려사항  (0) 2015.12.29
시스템 통계 수집(gathering system statististics)  (0) 2015.12.29
Additional statistics  (0) 2015.12.19
Common wait events  (0) 2015.12.19
Posted by neo-orcl
,