8. 통계정보 Ⅱ

조회 수 24328 추천 수 0 2011.05.04 13:04:17
멋진넘 *.18.66.42
제목 작성자 날짜
8. 통계정보 Ⅱ (current) 멋진넘 2011.05.04 13:04:17
복원
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">통계정보 Ⅱ</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">1.전략적인 통계수집 정책의 중요성</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.CBO 능력을 최대한 끌어 올리는 핵심 요소</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.DB 관리자위 핵심 역할은 통계정보 관리</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 3.통계정보 수집시 고려사항</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 4.주기적으로 통계정보 수집하면서 안정적이어야 최선</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 5.통계정보 수집 정책 수립은 필수</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">2.DBMS_STATS</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">3.컬럼 히스토그램 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">4.데이터 샘플링</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">5.파티션 테이블 통계수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.NDV(Number of Distinct Value)를 제외한 Incremental Global 통계 - 10.2.0.4</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.NDV를 포함한 완벽한 Incremental Global 통계 - 11g</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">6.인덱스 통계정보 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">7.캐싱된 커러 Invalidation</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">8.자동 통계정보 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.통계정보 갱신 대상 식별</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.자동 통계 수집기능 활용 가이드</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">9.Statistics Preference</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">=======================================================================================================</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px"><strong><span style="COLOR: #0000ff; FONT-SIZE: 18px">1.전략적인 통계수집 정책의 중요성</span></strong></span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.CBO 능력을 최대한 끌어 올리는 핵심 요소</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -통계정보 : CBO에게 미치는 영향력이 절대적이다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.DB 관리자위 핵심 역할은 통계정보 관리</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -문제 없던 쿼리가 갑자기 악성 SQL로 돌변했다면... 통계정보에서 비롯된 문제일 가능성이 높다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 3.통계정보 수집시 고려사항</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; ▶시간 : 부하가 없는 시간대에 가능한 빠르게 수집을 완려해야 함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; ▶샘플크기 : 가능한 적은 양의 데이터를 읽어야 함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; ▶정확성 :&nbsp; 전수 검사할 때의 통계치에 근접해야 함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; ▶안정성 : 데이터에 큰 변화가 없는데 매번 통계치 정보가 바뀌지 않아야 함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 4.주기적으로 통계정보 수집하면서 안정적이어야 최선</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 5.통계정보 수집 정책 수립은 필수</span></p>
<p><span style="FONT-FAMILY: Monospace"></span>&nbsp;</p>
<p><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px"><strong>2.DBMS_STATS</strong></span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -과거 Analyze 명령어 대신 DBMS_STATS 패키지를 사용하는 것이 바람직</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -특히 파티션 테이블/인덱스일 때는 반드시 DBMS_STATS를 사용해야 함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -DBMS_STATS.GATHER_TABLE_STATS 프로시저 인자표(p446~447)</span></p>
<p><span style="FONT-FAMILY: Monospace"><strong></strong></span>&nbsp;</p>
<p><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px"><strong>3.컬럼 히스토그램 수집</strong></span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -비싼 비용관리로 필요한 컬럼에만 히스토그램을 수집함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -조건절에 자주 사용하면서 편중된 데이터 분포를 갖는 컬럼이 주 대상임</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -아래와 같은 컬럼에는 Histogram이 불필요함(★★★)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶컬럼 데이터 분포가 균일</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶Unique하고 항상 등치조건으로만 검색되는 컬럼</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶항상 Bind 변수로 검색되는 컬럼</span></p>
<p><span style="FONT-FAMILY: Monospace"><strong></strong></span>&nbsp;</p>
<p><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px"><strong>4.데이터 샘플링</strong></span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -샘플링 비율을 높일수록 통계쩡보의 정확도는 높아지고 수집시간은 더 소요된다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶샘플링 비율</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -샘플링 비율 조정을 위해선 DBMS_STATS.ESTIMATE_PERCENT 인자를 사용한다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5%에서 시작해 값을 늘려가며 두세번만 통계를 수집해 보면 적정 크기를 결정할 수 있음)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶블록 단위 샘플링</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -기본 값은 ROW단위 샘플링</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (블록 단위 샘플링이 더 효과적이긴 하지만 데이터 분포가 고르지 않을 때 정확도 문제발생)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶안정적인 통계정보의 필요성</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -전수조사에 비해 매번 통게치가 다르게 구해질 수 있음. 실행계획에 영향이 있음</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (특히, NULL 값이 많거나 데이터 분포가 고르지 않을 때 더욱 그러함)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶해시 기반 알고리즘으로 NDV 계산 - 11g의 New Feature</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -소트를 수행하지 않기 때문에 기존 샘플링 방식보다 빠르다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -전체를 대상으로 NDV(the Number of Distinct Values)를 구하므로 정확도가 100%에 가깝다.</span></p>
<p><span style="FONT-FAMILY: Monospace"></span>&nbsp;</p>
<p><strong><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px">5.파티션 테이블 통계수집</span><br /></strong><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -파티션 테이블일 때 테이블 Level 통계(global 통계)와 파티션 Level 통계를 따로 관리함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶파티션 Level 통계</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -Static Partition Pruning이 작동될 때 사용됨</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -결합 파티션(Hash + Range)일 때는 서브파티션 Level로 통계를 관리할 수 있다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; ▶테이블 Level 통계</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -Dynamic Partition Pruning이 작동될 때 사용됨</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; -쿼리에 바인드 변수가 사용됐거나 파티션 카에 대한 조건절이 없을 때도 테이블레벨 통계가 사용됨</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; (아래의 내용은 이해가 잘 되지 않아서...일단 Skip 처리함 B조 자료 참고해야 할 듯...)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.NDV(Number of Distinct Value)를 제외한 Incremental Global 통계 - 10.2.0.4</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.NDV를 포함한 완벽한 Incremental Global 통계 - 11g</span><br /><span style="FONT-FAMILY: Monospace"></span></p>
<p><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px"><strong>6.인덱스 통계정보 수집</strong></span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -테이블 통계를 수집하면서 CASCADE옵션을 TRUE로 설정하면 해당 테이블 모든 인덱스통계도 같이 수집함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -별도로 인덱스마다 GATHER_INDEX_STATS를 따로 수행하는 것과 일량은 동일함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -이미 정렬된 상태여서 SORT 연산이 불필요하기에 수집에 걸리는 시간이 짧다(샘플링 방식 불필요)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -테이블 Level의 통계와 같이 진행될 경우 샘플링 비율이 인덱스 통계 수집에도 적용되는 문제 발생</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; 이런 경우는 테이블 통계만 샘플링 방식 처리, 인덱스는 전수 검사를 하도록 수집하는 것이 좋다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; /* 테이블 통계는 ESTIMATE MODE */</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'EMPLOYEES', CASCADE=&gt;FALSE, </span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTIMATE_PERCENT=&gt;10);</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; /* 인덱스 통계는 COMPUTE MODE */</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; EXEC DBMS_STATS.GATHER_INDEX_STATS(USER, 'EMP_DEPARTMENT_IX', ESTIMATE_PERCENT=&gt;100);</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp; EXEC DBMS_STATS.GATHER_INDEX_STATS(USER, 'EMP_EMP_ID_PK'&nbsp;&nbsp;&nbsp; , ESTIMATE_PERCENT=&gt;100);</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -cf. 10g부터는 인덱스를 처음 생성하거나 재생성할 때 인덱스 통계가 자동 수집된다</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (_optimizer_compute_index_stats = true)</span></p>
<p><span style="FONT-FAMILY: Monospace"></span>&nbsp;</p>
<p><strong><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px">7.캐싱된 커서 Invalidation</span><br /></strong><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; DBMS_STATS.GATHER_TABLE_STATS (</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; OWNNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; TABNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; PARTNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; ESTIMATE_PERCENT NUMBER&nbsp;&nbsp; DEFAULT TO_ESTIMATE_PERCENT_TYPE(GET_PARAM</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ('ESTIMATE_PERCENT')),</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; BLOCK_SAMPLE&nbsp;&nbsp;&nbsp;&nbsp; BOOLEAN&nbsp; DEFAULT FALSE,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; METHOD_OPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT GET_PARAM('METHOD_OPT'),</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; DEGREE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER&nbsp;&nbsp; DEFAULT TO_DEGREE_TYPE(GET_PARAM('DEGREE')),</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; GRANULARITY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; CASCADE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOLEAN&nbsp; DEFAULT TO_CASCADE_TYPE(GET_PARAM('CASCADE'))</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; STATTAB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; STATID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; STATOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULTNULL,</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; NO_INVALIDATE&nbsp;&nbsp;&nbsp; BOOLEAN&nbsp; DEFAULT TO_NO_INVALIDATE_TYPE(GET_PARAM('NO_INVALIDATE')),</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; FORCE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOLEAN&nbsp; DEFAULT FALSE );</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; NO_INVALIDATE : 의존적인 CURSOR를 INVALIDATE 할 지, 안할 지 결정</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9i</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRUE&nbsp; - 관련된 CURSOR 를 INVALIDATE 하지 않는다.</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE - 관련된 CURSOR 를 INVALIDATE 한다. (9I까지의 DEFAULT VALUE)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10g</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_STATS.AUTO_INVALIDATE</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - DBMS가 의존적 CURSOR를 언제 INVALIDATE 할지 자동으로 결정 </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (10G 부터의 DEFAULT VALUE)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 이때 작용하는 PARAMETER는 _OPTIMIZER_INVALIDATION_PERIOD 이고, DEFAULT 롤 18000초</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; (5시간) 이다.&nbsp;</span><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">즉, 통계 정보 수집에 의해 통계 정보가 변경된 후 약 5시간에 걸쳐 랜덤한 시점에&nbsp; </span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 해당 CURSOR가&nbsp;</span><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">실행될 때&nbsp;</span><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">INVALIDATION이 발생한다. 이것을 AUTO INVALIDATION이라고 부른다. </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 일정 시간에 걸쳐 랜덤하게 CURSOR를 INVALIDATION함으로써 특정 시점에 HARD PARSE가&nbsp; 한꺼번에 </span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 몰리는 현상을&nbsp;</span><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">피할 수 있다.&nbsp; </span></p>
<p><span style="FONT-FAMILY: Monospace"></span>&nbsp;</p>
<p><strong><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px">8.자동 통계정보 수집</span><br /></strong><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 1.통계정보 갱신 대상 식별</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -테이블별 모니터링 가능</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; 9i&nbsp; 선택적 가능 : alter table emp monitoring</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; 10g 모든 테이블 </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -DML 발생량 모니터링 : statistic_level이 typical, all일 때는 모니터링 테이블에서 </span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 발생하는 DML모니터링</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -10% 이상 변경이 발생했을 때는 테이블 상태가 stale로 변경됨</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; *_tab_statistics 뷰의 stale_stats = 'YES'로 바뀜(SELECT * FROM USER_TAB_STATISTICS;)</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; stale 상태인 테이블들에 대해선 통계정보를 새롭게 수집합</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; (gather_database_stats OR gather_schema_stats 프로시저 호출하면서 옵션인자를 별도 지정함</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -11g에선 stale 상태로 바뀌는 임계치를 오브젝트별로 조정가능 </span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; 2.자동 통계 수집기능 활용 가이드</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -중대형급 이상일 경우는 10g에서 제공하는 자동통계 수집가능은 사용하지 않는 것이 좋음</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; Maintenance 윈도우 이내에 통계수집이 완료되지 않을 경우는 불안정한 상태에 빠질 수 있음</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp; -오브젝트별 전략을 세우고 짧은 시간 내에 정확하고 안정적인 통계정보를 수집할 수 있도록 별도의</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; 스크립트를 준비하는 것이 좋음</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp;&nbsp;&nbsp;&nbsp; </span><br /><strong><span style="FONT-FAMILY: Monospace; COLOR: #0000ff; FONT-SIZE: 18px">9.Statistics Preference</span><br /></strong><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -11g의 New Feature</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -dbms_stats.set_table_prefs, dbms_stats.set_scheme_prefs 프로시저 사용하여 설정</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 13px">&nbsp; -Preference 설정 내용조회 View : *_tab_stat_prefs</span></p>
<p>&nbsp;</p>
멋진넘 2011.05.02 13:30:53
복원
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">통계정보 Ⅱ</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">1.전략적인 통계수집 정책의 중요성</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.CBO 능력을 최대한 끌어 올리는 핵심 요소</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.DB 관리자위 핵심 역할은 통계정보 관리</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 3.통계정보 수집시 고려사항</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 4.주기적으로 통계정보 수집하면서 안정적이어야 최선</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 5.통계정보 수집 정책 수립은 필수</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">2.DBMS_STATS</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">3.컬럼 히스토그램 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">4.데이터 샘플링</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">5.파티션 테이블 통계수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.NDV(Number of Distinct Value)를 제외한 Incremental Global 통계 - 10.2.0.4</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.NDV를 포함한 완벽한 Incremental Global 통계 - 11g</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">6.인덱스 통계정보 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">7.캐싱된 커러 Invalidation</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">8.자동 통계정보 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.통계정보 갱신 대상 식별</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.자동 통계 수집기능 활용 가이드</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">9.Statistics Preference</span></p>
<p>&nbsp;</p>
<p>=======================================================================================================</p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">1.전략적인 통계수집 정책의 중요성</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.CBO 능력을 최대한 끌어 올리는 핵심 요소</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.DB 관리자위 핵심 역할은 통계정보 관리</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 3.통계정보 수집시 고려사항</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 4.주기적으로 통계정보 수집하면서 안정적이어야 최선</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 5.통계정보 수집 정책 수립은 필수</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">2.DBMS_STATS</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">3.컬럼 히스토그램 수집</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">4.데이터 샘플링</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">5.파티션 테이블 통계수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.NDV(Number of Distinct Value)를 제외한 Incremental Global 통계 - 10.2.0.4</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.NDV를 포함한 완벽한 Incremental Global 통계 - 11g</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">6.인덱스 통계정보 수집</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">7.캐싱된 커서 Invalidation</span></p>
<p><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">8.자동 통계정보 수집</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 1.통계정보 갱신 대상 식별</span><br /><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">&nbsp; 2.자동 통계 수집기능 활용 가이드</span></p>
<p><span style="FONT-FAMILY: Monospace; FONT-SIZE: 14px">9.Statistics Preference</span><br /></p>
멋진넘 2011.04.29 16:20:56