금융회사 실무 - 대용량 처리 오라클 힌트

2023년 05월 05일 by 보험지식창고

    금융회사 실무 - 대용량 처리 오라클 힌트 목차
반응형

금융회사에서 다양한 데이터를 조회하고 조인하는 과정속에서 쿼리가 잘짜여져도 시간이 오래 걸리는 현상들이 많았습니다.

(평균적으로 몇천만에서 몇억건들의 데이터가 존재합니다)

 

동시간대에 같은 DB를 사용하고 있는 사람들이 많을 수 도있고 없을 수도 있지만 실무에서 유용하게 쓰이는 힌트들에 대해서 설명하고자 합니다.

 

힌트 기본 문법

SELECT /*+ [힌트절] */

힌트절은 주석문 안에 표시하기 때문에 에러를 리턴하는 일은 발생할 수 없습니다. 단지, 힌트가 적용되지 않을뿐입니다.

 

접근 순서를 결정하는 힌트절

SELECT     /*+  ORDERED (A  B) 

                         FULL(A) PARALLEL(A 10) 

                         FULL(B) PARALLEL(B 10) */              

                   *

FROM        B,

                   A

WHERE   1=1

               AND A.ID=B.ID

               AND A . ~

               AND A. ~

               AND B. ~

 

실제로 업무 도중에, 힌트를 쓰지 않았을 때 실행 계획을 확인해보니 B를 먼저 스캔하고 그다음 A를 스캔하는 사실을 알 수 있었습니다. 그런데, WHERE을 보면 A테이블의 조건은 2개, B테이블의 조건은 1개라는 사실을 알 수 있습니다. 물론, 실제로 쿼리는 더 복잡하지만 일부 생략하겠습니다. 

 

결과적으로 테이블을 FULL SCAN 하게될 경우 B를 먼저 스캔한다면 조건절이 적기 때문에 데이터가 많이 필터가 되지않는다는 사실을 알게 되었고 이로 인해 B를 스캔하고 걸러진 데이터를 A의 전체 데이터와 다시 매칭하면서 필터링을 하다보니 시간이 더욱 지연되는 사실을 알게 되었습니다. 

 

앞으로 대용량 처리 쿼리를 작성하고 실행할 때는 WHERE절의 흐름도 파악하면서 작성해야겠습니다

 

<주의사항>

PARALLEL(A  10) 에서 10은 MAX(CPU 장 수 * CORE갯수) 가 올 수 있습니다. 하지만, 나 혼자만 DB를 사용하는 것이 아니므로 MAX를 주는 것보다는 적당하게 4~10 사이를 추천드립니다. 

 

반응형

'IT' 카테고리의 다른 글

IP 주소 확인  (0) 2024.12.16
오라클 힌트  (0) 2024.12.13
AI 에이전트란?  (2) 2024.12.10
Java 와 Python 연동  (0) 2024.12.10
폐쇄망에서 Python 설치  (0) 2024.12.10