h1.통계정보 II
h3.(1) 전략적인 통계수집 정책의 중요성
h5.CBO 능력을 최대한 끌어 올리는 핵심 요소
h5.DB 관리자의 핵심 역할은 통계정보 관리
통계정보 수집 시 고려사항
h3.(2)DBMS_STATS
통계정보 수집을 위해 오랫동안 사용되어온 Analyze 명령어를 버리고 이제는 dbms_stats 패키지를 사용하는 것이 바람직하다.
8-1.jpg |
8-2.jpg |
h3.(3)컬럼 히스토그램 수집
히스토그램을 가지면 더 나은 실행계획을 수립히는 데 도움이 되지만 이를 수집하고 관리하는 비용이 만만치 않다.
히스토그램이 불필요한경우
h3.(4) 데이터 샘플링
샘플링비율 : dbms_stats 패키지에서 샘플링 비율을 조정하기 위해 estimate_percent 인자를 사용(보통5%)
블록단위샘플링 : block_sample 인자를 통해 블록 단위 샘플링을 할지 로우 단위 샘플링을 할지 결정
안정적인 통계정보의 필요성 : 매번 통계치가 다르게 구해질수 있다. (특히 컬럼에 Null 값이 많거나 데이터 분포가 고르지 않을 때) - 통계치는 샘플링 비율에 영향이 크다
해시 기반 알고리즘으로 NDV(the number of distinct values) 계산 - 11g
h3.(5) 파티션 테이블 통계 수집
dbms_stats 패키지- granularity 옵션
통계 정보 생성 GATHER_TABLE_STATS
http://www.gurubee.net/article/23928
h3.(6) 인텍스통계 수집
begin
-- 테이블 통계는 estimate mode
dbms_stats.gather_table_stats ( user , 'T' , cascade =>false, estimate_percent=>10);
-- 인텍스 통계는 compute mode
dbms_stats.gather_index_stats( user, 'T_OWNER_IDX' , estimate_percent=>100 );
end;
h3.(7) 캐싱된 커서 Invalidation
nojnvalidate 옵션
h3.(8) 자동통계 수집
select schedule_name, j . program_owner , j.program_name
, p.program_action, p.number_of_arguments
, cast (j.last_start_date as timestamp with local time zone) last_start_date
, last_run_duration , stop_on_window_close
from dba_scheduler_jobs j , dba_scheduler_programs p
where j.job_name = 'GATHER_STATS_JOB'
and p. program_name = j.program_name
8-3.jpg |
h3.(9) Statistics Preference