느려지는 이유가 뭘까요? 0 4 878

by 깨복숭이 [SQL Query] [2018.11.15 20:46:29]


안녕하세요 많은 정보를 얻어가는 개발자입니다.

본론으로 2000만 데이터가 있는 테이블에  결합 인덱스 한개(ID, FLAG), NONUNIQUE 인덱스(DATE) 한개가 걸려 있습니다.

매일 특정시간에 15만데이터를 INSERT 시키는 프로시저를 제작 하고 있는데요

테스트로 같은 쿼리

    EX) INSERT /*+ APPEND_VALUES */ INTO TB_MEMBER_PAY_TEMP          (ID,FLAG,DATE,REQ_DAY,........)
        SELECT            ID,            FLAG,            REQ_DAY              ......         FROM PAY_TEMP

를 실행할때 최초에는 3초 그다음은 300초 또 다시 하면 10초 이런식으로 종잡을 수 없게 실행 시간이 걸리는데요

단순 INDEX SPLIT 으로 발생되는 건지 아니면 원래 그런건지 중요한건 인덱스를 지우고 나면 2초 3초입니다.

INDEX SPLIT에 의한 시간이 위 내용처럼 차이가 난다면 다른 방법으로 시간을 동일시 할 수 있는 뭐 이런게 있을까요?

질문이 잘 맞는 지 모르겠습니다.

이해 되시는 고수분 있으시면 답변 꼭 부탁드립니다.

 

by 팩토리 [2018.11.16 10:09:42]

혹시 인덱스가 클러스터 인덱스인가요?


by 깨복숭이 [2018.11.16 12:24:02]

넌클러스터입니다

PK는 없고 notnull만 두개입니다


by 임상준 [2018.11.19 10:57:17]

append 힌트를 빼보시면요?


by 마농 [2018.11.19 11:41:19]

append_values 힌트는
 - insert values 구문에서 사용하는 힌트네요.
 - insert select 구문에서는 append 사용해야 할 듯.
append 힌트 사용이 필요한가?
 - 인덱스 유무에 따라 실행시간이 달라진다면? 힌트가 제대로 안탄 듯 하구요.
 - 힌트가 제대로 탔다면 insert 후에 인덱스 리빌드 필수로 해줘야 합니다.
 - 그동안 리빌드 안했다면? 힌트가 제대로 안탄 듯 합니다.
 - append 를 굳이 해야 하는지 의문이네요.
 - append insert 를 하려면 여러가지 요소를 고려해야 합니다.
append insert 의 성능에 영향을 미치는 요소
 - DB 모드 : archive / noarchive
 - Table 모드 : logging / nologging
 - 인덱스 유무
예시
 - noarchive 의 경우 빠름
 - archive 의 경우 nologging 해줘야 빠름
 - 인덱스는 nologging 에서도 redo 생성됨. (드롭 후 재생성) 또는 (비활성화 후 리빌드)
 

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