Auto vs. Skewonly

  • DBMS_STATS Package의 METHOD_OPT Parameter에서 AUTO와 SKEWONLY 옵션은 Oracle이 Data의 분포를 고려하여, Bucket Size를 결정하는것은 동일하나, AUTO는 해당 Column이 Where절에서 Predicate로 사용된 적이 있는 경우에만 Histogram을 수집
  • 특정 Column이 Predicate로 사용되었는지 여부는 SYS.COL_USAGE$VIEW에서 관리된다.
METHOD_OPT Parameter의 Default 값FOR ALL COLUMNS SIZE AUTO


오해할 수 있는 Histogram에 의한 성능문제 예
  • 문제 상황
  1. Table 및 기타 Object들을 재생성한 후 Data Load
  2. 통계정보 생성(DBMS_STATS.GATHER_SCHEMA_STATS Procedure)
  3. Query들의 전반적인 성능들을 측정(수행시간:T1)
  4. 통계정보 재생성(DBMS_STATS.GATHER_SCHEMA_STATS Procedure)
  5. Query들의 전반적인 성능들을 측정(수행시간:T2)
  • 문제 발생
    • Data의 변화가 없으므로, T1 == T2이어야 하나, 실제는 그렇지 않을수 있음
    • deault 가 AUTO 인 관계로 첫번째 통계정보를 수집할때는 Query가 수행된 적이 없으므로 Histogram이 수집되지 않음, 두번째 통계정보 수집시에는 성능측정을 위해 Query들을 수행했으므로 Histogram이 수집될 확룔이 높음


  • 첫번째 수행시간 T1을 T2로 맞추려면
  1. DBMS_STATS.GATHER_SCHEMA_STATS Procedure에서 METHOD_OPT Parameter를 SKEWONLY로 변경
  2. 두번째 수집한 통계정보를 Export후 Import
  3. 두번째 수집한 통계정보에서 각 Histogram의 Bucket Size를 알아낸 후, 그 값을 첫번째 통계정보 수집에서 사용
10g부터는 자동 통계 수집에 의해 의도와 무관하게 Histogram이 생성되는 경우가 많아 주의 요망