행위

분석 함수 튜닝

DB CAFE

1 분석함수의 튜닝 고려사항

1.1 min/max 함수를 Ranking 함수 변경

  1. 최종일자에 해당하는 데이터를 구할 때, MAX(최종일자) 분석함수를 사용하지 말고 Ranking 분석 함수 사용.
  2. WINDOW BUFFER를 WINDOW NOSORT로 바꾸어 SORTING 부하를 줄여 줌.

1.2 ORDER BY 절에 NULL FIRST나 LAST를 삭제 검토

  1. 분석함수의 ORDER BY 절에 NULL FIRST나 LAST를 삭제할 수 있는지 검토.
  2. 인덱스 사용에 의한 Sort 유지 되도록 하여 추가적인 sort를 방지.
  • 주의 1) Index ASC로 사용 + 분석함수의 ORDER BY절에 NULL FIRST 는 추가적인 sort발생
  • 주의 2) Index DESC로 사용 + 분석함수의 ORDER BY절에 NULL LAST 는 추가적인 sort발생

1.3 여러 개의 분석함수를 하나로 통합

  1. 분석함수를 여러 개 사용할 때, 가능하면 OVER절의 Partition By와 Order By절을 일치 하도록 검토.
  2. 분석함수를 하나만 실행하는 효과를 얻어서 실행시간을 단축하도록 검토 .
 이때 ORDER BY는 완전히 같지 않아도 Operation은 통합 가능 
  • 주의 1) WINDOW NOSORT + WINDOW SORT => WINDOW SORT
  • 주의 2) WINDOW NOSORT + WINDOW BUFFER => WINDOW BUFFER
  • 주의 3) WINDOW BUFFER + WINDOW SORT => WINDOW SORT

1.4 Ranking 분석함수 이용 TOP SQL의 Sort 최소화

  1. Ranking 분석함수를 인라인뷰 외부에서 Rownum 처럼 Filter로 사용 시 불필요한 Partition By 절 삭제 검토 .
    1. FULL SCAN을 하거나 혹은 OVER절의 NULL FIRST나 LAST등의 원인으로 sort가 발생될 때 .
      1. Rownum과는 달리 STOPKEY가 발생되지 않으므로 비효율은 존재.
      2. 이 때 발생되는 오퍼레이션 은 WINDOW SORT PUSHED RANK
    2. 적절한 인덱스가 있어서 sort가 발생되지 않는 경우, Rownum 처럼 STOPKEY를 발생시켜 부분범위 처리의 효과.
      1. 분석함수를 Rownum 처럼 사용. WINDOW NOSORT STOPKEY 오퍼레이션 발생.
  • 주의 1) Partition By절 전체를 제거해야 한다는 것.
  : 만약 Partition By절에 컬럼이 하나라도 있으면 Sort가 대량으로 발생.

1.5 그룹 분석함수 NO-SORT

  1. Sort를 방지하고, STOPKEY 작동, sum/min/max/avg등의 Group 분석함수를 사용할 경우 명시적으로 WINDOW의 범위를 지정.
  2. WINDOW BUFFER Operation을 WINDOW NOSORT로 바꾸어 불필요한 sort를 방지.(현재 row 까지의 누적집계 시 )
  • 예시)
SUM(AMOUNT_SOLD) OVER(ORDER BY CUST_ID,CHANNEL_ID,TIME_ID 
                          ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                         )
  • 주의 1) Ranking 함수를 사용하여 WINDOW STOPKEY가 발생하는 경우는 SORT가 발생하지 않는 경우(NOSORT)뿐.
      그룹분석함수에 의해서 추가적인 SORT를 해야 한다면, 전체범위로 처리됨으로 STOPKEY가 발생하지 않음.