행위

"Group by 튜닝"의 두 판 사이의 차이

DB CAFE

(GROUP BY 핵심 사항)
 
(같은 사용자의 중간 판 4개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
= GROUP BY 튜닝 =
 
= GROUP BY 튜닝 =
== 개요 ==
+
== GROUP BY 와 HASH GROUP BY ==
 
* Group by와 Order by를 동일한 칼럼에 결합하여 사용할때, 성능 개선 효과 발생
 
* Group by와 Order by를 동일한 칼럼에 결합하여 사용할때, 성능 개선 효과 발생
 
* Group by를 수행하면 연관된 칼럼의 소팅을 포함해서 처리 하고 처리된 수행결과를 리턴함
 
* Group by를 수행하면 연관된 칼럼의 소팅을 포함해서 처리 하고 처리된 수행결과를 리턴함
6번째 줄: 6번째 줄:
 
** 즉, Sort-Based Group by보다 항상 낳은 성능을 발휘한다.  
 
** 즉, Sort-Based Group by보다 항상 낳은 성능을 발휘한다.  
 
** 불행하게도 Order By 절을 동일 칼럼에 Group By절과 함께 사용한다면 Sort-Based Group by로 변경하며 성능은 저하될수 있음
 
** 불행하게도 Order By 절을 동일 칼럼에 Group By절과 함께 사용한다면 Sort-Based Group by로 변경하며 성능은 저하될수 있음
 
+
*힌트 OPT_PARAM("_GBY_HASH_AGGREGATION_ENABLED" "FALSE")
OPT_PARAM("_GBY_HASH_AGGREGATION_ENABLED" "FALSE") 힌트
 
  
 
== GROUP BY 튜닝 핵심 사항  ==
 
== GROUP BY 튜닝 핵심 사항  ==
 
# 오라클에서 ORDER BY를 해야하는 상황에서 강제적으로 HASH GROUP BY를 수행하도록 하는것이 핵심
 
# 오라클에서 ORDER BY를 해야하는 상황에서 강제적으로 HASH GROUP BY를 수행하도록 하는것이 핵심
# 오라클이 HASH GROUP BY를 수행할 수 있도록 서브쿼리에 GROUP BY를 수행하도록 만들었다.
+
# 오라클이 HASH GROUP BY를 수행할 수 있도록 서브쿼리에 GROUP BY를 수행하도록 변경함
# 그리고 외부 쿼리에서 ORDER BY를 수행할때 NO_MERGE 힌트를 지정하여, 외부 쿼리가 내부 서브쿼리에 통합되지 않도록 지정했다.
+
# 그리고 외부 쿼리에서 ORDER BY를 수행할때 NO_MERGE 힌트를 지정하여, 외부 쿼리가 내부 서브쿼리에 통합되지 않도록 지정
# 결과적으로 플랜을 보면, HASH GROUP BY를 수행하고, 그 결과를 SORT ORDER BY로 처리되도록 재설정 되었다.
+
# 플랜을 보면, HASH GROUP BY를 수행하고, 그 결과를 SORT ORDER BY로 처리되도록 재설정
 +
 
 +
== 결론 ==
 +
# GROUP BY를 ORDER BY와 동일한 칼럼에 결합해서 적용할때에는 오라클 옵티마이저는 더 효과적인 HASH GROUP BY를 사용하지 않고, SORT GROUP BY를 수행한다.
 +
# SORT ORDER BY 계획을 피하기 위해서 SORT GROUP BY를 수행한 것이다. 그러나 성능은 형편 없다는것을 확인 할 수 있다.
 +
# 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것
 +
# 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것
 +
 
 +
[[Category:oracle]]

2023년 4월 26일 (수) 23:51 기준 최신판

thumb_up 추천메뉴 바로가기


1 GROUP BY 튜닝[편집]

1.1 GROUP BY 와 HASH GROUP BY[편집]

  • Group by와 Order by를 동일한 칼럼에 결합하여 사용할때, 성능 개선 효과 발생
  • Group by를 수행하면 연관된 칼럼의 소팅을 포함해서 처리 하고 처리된 수행결과를 리턴함
  • Hash Group By 는 소팅 없이 이러한 결과를 생성함
    • 즉, Sort-Based Group by보다 항상 낳은 성능을 발휘한다.
    • 불행하게도 Order By 절을 동일 칼럼에 Group By절과 함께 사용한다면 Sort-Based Group by로 변경하며 성능은 저하될수 있음
  • 힌트 OPT_PARAM("_GBY_HASH_AGGREGATION_ENABLED" "FALSE")

1.2 GROUP BY 튜닝 핵심 사항[편집]

  1. 오라클에서 ORDER BY를 해야하는 상황에서 강제적으로 HASH GROUP BY를 수행하도록 하는것이 핵심
  2. 오라클이 HASH GROUP BY를 수행할 수 있도록 서브쿼리에 GROUP BY를 수행하도록 변경함
  3. 그리고 외부 쿼리에서 ORDER BY를 수행할때 NO_MERGE 힌트를 지정하여, 외부 쿼리가 내부 서브쿼리에 통합되지 않도록 지정
  4. 플랜을 보면, HASH GROUP BY를 수행하고, 그 결과를 SORT ORDER BY로 처리되도록 재설정 됨

1.3 결론[편집]

  1. GROUP BY를 ORDER BY와 동일한 칼럼에 결합해서 적용할때에는 오라클 옵티마이저는 더 효과적인 HASH GROUP BY를 사용하지 않고, SORT GROUP BY를 수행한다.
  2. SORT ORDER BY 계획을 피하기 위해서 SORT GROUP BY를 수행한 것이다. 그러나 성능은 형편 없다는것을 확인 할 수 있다.
  3. 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것
  4. 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것