"Group by 튜닝"의 두 판 사이의 차이
DB CAFE
(→개요) |
|||
(같은 사용자의 중간 판 2개는 보이지 않습니다) | |||
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") |
== 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로 처리되도록 재설정 됨 |
== 결론 == | == 결론 == | ||
19번째 줄: | 19번째 줄: | ||
# 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것 | # 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것 | ||
# 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것 | # 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것 | ||
+ | |||
+ | [[Category:oracle]] |
2023년 4월 26일 (수) 23:51 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
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 튜닝 핵심 사항[편집]
- 오라클에서 ORDER BY를 해야하는 상황에서 강제적으로 HASH GROUP BY를 수행하도록 하는것이 핵심
- 오라클이 HASH GROUP BY를 수행할 수 있도록 서브쿼리에 GROUP BY를 수행하도록 변경함
- 그리고 외부 쿼리에서 ORDER BY를 수행할때 NO_MERGE 힌트를 지정하여, 외부 쿼리가 내부 서브쿼리에 통합되지 않도록 지정
- 플랜을 보면, HASH GROUP BY를 수행하고, 그 결과를 SORT ORDER BY로 처리되도록 재설정 됨
1.3 결론[편집]
- GROUP BY를 ORDER BY와 동일한 칼럼에 결합해서 적용할때에는 오라클 옵티마이저는 더 효과적인 HASH GROUP BY를 사용하지 않고, SORT GROUP BY를 수행한다.
- SORT ORDER BY 계획을 피하기 위해서 SORT GROUP BY를 수행한 것이다. 그러나 성능은 형편 없다는것을 확인 할 수 있다.
- 성능 개선을 위해서 GROUP BY를 인라인 뷰에 작성하고, 외부 쿼리에서 ORDER BY를 수행하도록 할것
- 또한 두개의 쿼리가 머지되어 작동하지 않도록 /*+ NO_MERGE */ 힌트를 부여하는것에 주의 할것