728x90

Lpar1과 아이들님 | 2013-06-14 15:35:08




Lpar1과 아이들 2013-06-14 15:38:12
본문쓰는 부분이 안되서 여기다 보충 설명을 하겠습니다.
만약 select * from table where db2.date = '201306'; 이렇게 하면 결과는 빠르게 나오지만,
select * from table where db2.date between '20130601' and '20130630' 이렇게 하면, 몇시간이 걸려도 정지 상태입니다.
혹시 db2 federation에 관해 아시는 분 계시면 정보 좀 공유 부탁드립니다.

pajama 2013-06-14 15:52:14
느리다면 where db2.date like '201306%' 또는 where db2.date in ('20130601', '20130602', ...)와 같은식으로 해보시는건 어떨까요
실행계획도 봐야합니다.

Lpar1과 아이들 2013-06-14 19:05:40
like로 하는것은 between을 했을때 처럼 느립니다. in으로 걸으면, 당연히 빠르고요.

pajama 2013-06-14 21:43:19
혹시 between으로 했을때 인덱스를 쓰지 못하는게 아닌지.. in이나 <, > 등으로 변경해서 수행해보시는게 좋겠습니다.

Lpar1과 아이들 2013-06-17 17:29:08
넹 감사합니다. 말씀하신데로, 인덱스를 못탑니다. 그래도 between 이 안된다니~ 좀 아쉽긴 하네요.

HyunHo Lee 2013-06-18 10:53:25
Federation의 경우 Optimizer가 데이터를 가져올때 where 절을 무시하고 전체를 가져와서 작업을 할지 일부 데이터만 가지고 올지 정하게 되어 있습니다. where 절을 최대한 이용해서 적게 가져올 수 있는 방법이 있는데
db2 "ALTER SERVER 서버명 OPTIONS (ADD DB2_MAXIMAL_PUSHDOWN 'Y')"
그런데 이게 꼭 먹는 방법은 아닙니다. 상식적으로 생각하시기에 index를 안타는 이유를 모르시겠으면 IBM support인 PMR을 열어 보십시오.
가끔 bug성으로 옵티마이져가 잘못 판단하는 경우가 있습니다. 이런건 fix를 통해 해결해 줍니다.

Lpar1과 아이들 2013-06-19 13:40:19
db2 "ALTER SERVER 서버명 OPTIONS (ADD DB2_MAXIMAL_PUSHDOWN 'Y')" 이옵션은 처음에 서버 생성할때 줬습니다. ㅠㅠ



728x90

+ Recent posts