1.1. 부분범위처리의 개념

  • 부분범위처리란 : 운반단위(Array size)까지만 먼저 처리하여 그결과를 추출시킨 후 다음작업을 계속 하겠다는 사용자의 요구가
    있을때 잠정적으로 수행을 멈추는 처리방식을 말한다.
    • 주어진 조건을 만족하는 처리범위가 아무리 넓다고 하더라도 실제로 처리할 데이터는 아주 소량이 되므로 조건범위와 무관하게 처리량을 크게 줄일수있는 큰 장점이다.


전체범위 처리 : 드라이빙 조건을 만족하는 범위를 모두 스캔하여 체크조건으로 검증한 후 성공한 건에 대해 임시 저장공간에 저장한다.
              저장이 완료되면 필요한 2차 가공을 한 수 운반단위만큼 추출시키고 다음 요구가 있을때까지 일단멈추게된다.
부분범위 처리 : 드라이빙 조건을 만족하는 범위를 차례로 스캔하면서 체크조건을 검증하여 성공한 건을 바로 운반단위로 보낸다.
              운반단위가 채워지면 수행을 멈추고 그결과를 추출시킨다.
         => 처리할 범위가 아무리 넓다고 하더라도 그 범위 중의 일부만 처리하므로 빠른 수행속도를 보장받을 수가 있다.
              - 조건을 만족하는 전체집합이 아닌 일부분만 ACCESS
              - DATA량이 많아도 PERFORMANCE에 지장이 없고, 오히려 향상
                - INDEX나 CLUSTER를 적절히 활용한 SORT의 대체 
                - TABLE은 ACCESS하지않고 INDEX만 사용하도록 유도 
                - EXISTS의 활용 
                - ROWNUM의 활용   
                - QUERY를 이원화 하여 일부분씩 SCAN하도록 유도
                - Stored Function을 이용




Rows            Execution Plan
----------     -----------------------------------------------------------------------
        0       SELECT STATEMENT
   900421         NESTED LOOPS
      596          VIEW
     1680           SORT (GROUP BY)
     2929             TABLE ACCESS  (FULL)  PF  'SURVERY'
    
   900421          TABLE ACCESS (BY ROWID)  OF 'DA100T'
   901612             INDEX (RANGE SCAN) OF  'DA100_IDX1' (UNIQUE)


=> 'SURVEY' 테이블을 먼저 전체범위를 액세스하여 GROUP BY를 한 결과를 아용해 'DA100T'테이블과 부분범위 처리로 
    Nested lOOPS 조인을 한다.

[TRACE에서  전체범위처리 예]
 SORT(UNIQUE), SORT(JOIN), SORT(AGGREGATE), SORT(ORDER BY), SORT(GROUP BY) , VIEW(처리중에 내부적으로 임시 저장공간에 쓰기작업을 하였다는 뜻)

[TRACE에서  부분범위처리 예]
'Execute' 나 'Fetch' 라인에 있는  'Query, Disk, Current'을 확인하여 전체 테이블의 블록 수보다 훨씬 적으면 부분범위처리 하고있다.

문서에 대하여

  • 이 문서는 오라클클럽 대용량 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 이화식님의 새로쓴 대용량 데이터베이스 솔루션을 참고했습니다.*
  • 이 문서를 다른 블로그나 홈페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^