본문 바로가기
컴퓨터/Oracle

[Oracle]HISTOGRAM 오라클 히스토그램 분포문제점

by TEATO 2014. 7. 21.
반응형

[Oracle]HISTOGRAM 오라클 히스토그램 분포문제점


비용기반 옵티마이저에서 중요한것이 바로 통계정보이죠.

통계정보를 수집했다 하더라도 데이터간의 분포가 균등하지않고

크게 차이가난다면 통계정보를 최신화 했어도 옵티마이저가 잘 따라주지않습니다.

이럴때 HISTOGRAM을 이용하면 됩니다.


먼저 테이블을 분석했습니다.


위 쿼리를 실행했을때 Statistics에는 5개 rows 이지만

실행계획부분의 ROWS는 294개로 불일치하는것을 볼 수 있습니다.

이런경우가 칼럼의 데이터들이 균등하게 분포되어있지않고

차이가 많이나는 때입니다. 이때 히스토그램을 이용해보겠습니다.



분석하는 쿼리 뒤에 

FOR COLUMNS deptno SIZE 98이라는 절을 주었는데요

deptno에서 독립적인 값이 갯수를 size뒤에 써주면 됩니다.

잘못써주면 오히려 역효과가 날 수 있으니 주의해주세요

deptno의 독립적인 값 갯수가 98개 이므로 size 98을 해주었습니다.


이런 정보를 주자 statistics와 실행계획부분 rows가 일치하는것을 볼 수있습니다.


히스토그램을 사용해서 분석한 테이블과 그렇지않은 테이블을 구분하는방법은

user_tab_columns에 num_buckets를 보시면 됩니다. 아까 98로 설정했던 BIG_EMP에 DEPTNO의

NUM_BUCKETS가 98로 설정된것을 볼 수 있습니다. 히스토그램을 이용하지않은것은 1로 되어있네요




반응형

댓글