툴 사용시(오렌지) 조회속도와 조회 결과의 page down 문제.. 0 4 3,880

by 이정수 [SQL Query] [2013.11.04 08:44:52]



안녕하세요. 요즘 데이타 마이그레션때문에 쿼리에 애를 좀 먹고 있는 한 직장인입니다.

다름이 아니라..

데이타 조회를 하는데, 오렌지에서 쿼리를 돌리면.. 일단 5초 내로 최초 100건은 나옵니다..

문제는 오렌지 툴에서 나머지 데이타를 확인하기 위해서 page down을 하면.. 그다음 100건부터는 10초 이상..

대략 데이타가 20000건정도 되는데.. page down으로 데이타를 다 내리는데.. 시간이 대책없이 오래 걸립니다.. 지금도 약 한시간 정도 지났는데.. 3000건 정도 조회 되고 있네요..;;;

이건 sql 문제일까요??;; 보통 100건 나올때 오래 걸리지 않으면.. 쿼리상 문제 없다고 생각을 하는데..

해당 관련 문제는 어떻게 찾아봐서 해결을 해야 할까요..;; 뭐 무한정 기다리면 시간이 해결이야 해주겠지만.. 이건 아닌거 같아서요.. 쿼리가 잘못됐으면 수정을 해야 할텐데..

샘플 쿼리 입니다..

SELECT /*+ INDEX(T1 RCM1101_16_IX05) */T1.CORP_CD
, T1.CTR_NO
, T1.DED_DGRE
, T1.DEMD_CUS_NO
, T1.RC_DT
, T1.RC_SEQ
, T1.ATAM_OC_AMT
, T1.RC_DEPCD
, (SELECT RPM_DC
  FROM RCD1103_16
WHERE CORP_CD = T1.CORP_CD
   AND CTR_NO = T1.CTR_NO
   AND DED_DGRE = T1.DED_DGRE
   AND DEMD_CUS_NO = T1.DEMD_CUS_NO
   AND RC_DT = T1.RC_DT
   AND RC_SEQ = T1.RC_SEQ
   AND ROWNUM = 1
   ) AS RPM_DC
, T1.RC_STC
, (SELECT CTR_DEPCD
  FROM EXM1000
WHERE CORP_CD = T1.CORP_CD
   AND CTR_NO = T1.CTR_NO
   AND DED_DGRE = T1.DED_DGRE
   ) AS CTR_DEPCD
-- , T2.CTR_DEPCD
, T1.RSOL_SLIP_DT
, T1.RSOL_SLIP_NO
, T1.BEG_RG_ENO
, T1.BEG_RG_DTM
, T1.FNL_MOD_ENO
, T1.FNL_MOD_DTM
  FROM RCM1101_16 T1
WHERE T1.CORP_CD    = 'A01'
   AND T1.RC_STC     = 'C9220'
   AND T1.ATAM_OC_AMT   > 0
   AND EXISTS (SELECT 'O'
FROM BIZWIZ.SAP_CTR_INFO
    WHERE CORP_CD = T1.CORP_CD
  AND CTR_NO = T1.CTR_NO
  AND DED_DGRE = T1.DED_DGRE
  AND CLOSE_TYPE IN ('1', '2', '3', '4')
  )
   AND EXISTS (SELECT 'O'
FROM (SELECT /*+ INDEX(A RCM1101_16_IX04) */A.CORP_CD
    , A.CTR_NO
    , A.DED_DGRE
    , MAX(A.RC_DT || A.RC_SEQ) AS SEQ
FROM RCM1101_16 A
    WHERE CORP_CD = 'A01'
  AND RC_STC = 'C9220'
    GROUP BY A.CORP_CD, A.CTR_NO, A.DED_DGRE
  ) T
    WHERE T.CORP_CD = T1.CORP_CD
  AND T.CTR_NO = T1.CTR_NO
  AND T.DED_DGRE = T1.DED_DGRE
  AND SUBSTR(T.SEQ, 0, 8) = T1.RC_DT
  AND SUBSTR(T.SEQ, 9, 3) = T1.RC_SEQ
  )
by 강서꽃미남 [2013.11.04 09:01:59]
페이지 다운이란걸 뭘 의미하나요?
아래 GRID 화면에서 다음 장으로 넘어가는걸 확인하신 건가요?

기존 넷텀이나, 쁘띠 같은 툴은 이용해서 접속하여 값을 도출해내는 방식과
오렌지나 토드처럼 써드파티 툴을 이용해서 값을 도출해내는 방식에  속도 차이는 있을 수 있습니다.
이건 쿼리의 문제가 아니라 불러오는 방식에 따라 차이가 있습니다.
같은 쿼리를 날리더라도 로컬과 프로그램에서의 속도 차이는 존재합니다.

by 강서꽃미남 [2013.11.04 09:03:34]
질문의 의도가 이 문제인지는 정확히 모르겠으나, 이 문제는 현업의 많은 분들이 겪는 현상입니다.

http://www.gurubee.net/article/50454
참고하시길 바랍니다.

by 마농 [2013.11.04 09:34:41]
-- 최종 자료만 조회하기 위해 마지막에 Exists 구문을 사용하셨네요.
-- Group By 도 들어가고 한 테이블을 두번 읽게 되네요.
-- 분석함수를 통해 테이블을 한번만 읽도록 고쳐보세요.
SELECT *
  FROM (SELECT a.*
             , ROW_NUMBER() OVER(
               PARTITION BY corp_cd, ctr_no, ded_dgre
               ORDER BY rc_dt DESC, rc_seq DESC
               ) rn
          FROM rcm1101_16 a
         WHERE corp_cd = 'A01'
           AND rc_stc  = 'C9220'
        ) t1
 WHERE t1.rn = 1
   AND t1.atam_oc_amt > 0
;
-- 그리고 조인 보다는 서브쿼리를 주로 사용하셨네요.
-- 이부분도 조인으로 변경이 가능한지 검토해 보세요.

by 부랄큰타이거 [2013.11.04 11:53:34]
전체 data를 patch 하는 시간과 일부 data를 patch 하는데 걸리는 시간의 차이로 생각 됩니다. 

오렌지나 토드에서는 기본세팅된 값에 따라 전체 data 중 일부 data만 patch하기 때문에 처음엔 빠르게 느끼실 수 있습니다. 

쿼리의 plan 정보를 정확히 보시고 튜닝을 하셔야 할듯 합니다.

참...그리고 참고로 마이그레이션 하실때 SELECT 하여 조건 체크하여 insert 또는 update 하는 것 보다는 MERGE INTO 기능을 사용하는 걸 추천 합니다....

수고하세요....
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입