IT/ORACLE

Oracle 10gR2 New in-Memory Sort Algorithm, Group by문제점 및 해결방법

Qhtlr 2007. 6. 28. 10:47

오라클 10gR2의 New Feature중에 in-Memory sort 부분에서 발생할 수 있는 문제점과 해결책에 대해서

이전 버전까지는 Sort operation시에  Sort group by를 사용했으나 10gR2에서는 HASH GROUP BY 를 사용한다.
그래서 이전 버전까지는 group by절을 사용하면 Sorting된 결과가 보여졌으나 10gR2에서는 그렇지 않을수도 있습니다.

SQL> select deptno,count(*) from emp group by deptno;
       DEPTNO   COUNT(*)
     ---------- ----------
           10          3      -- DEPTNO가 Orderingt되어 보여짐
           20          5
           30          6

하지만 10gR2부터는 Ordering된 결과를 Display못 할 수도 있다.
 SQL> select deptno,count(*) from emp group by deptno;
       DEPTNO   COUNT(*)
     ---------- ----------
           30          6      -- DEPTNO가 Grouping Column순으로 나오지 않음.
           20          5
           10          3


해결방법
1. Ordering이 필요하면 "GROUP BY"와 함께 "ORDER BY"를 반드시 기술해야 함.
2. init parameter 설정
   _gby_hash_aggregation_enabled parameter = false.
   OR
   optimizer_features_enabled=9.2.0
   OR
   optimizer_features_enabled=8.1.7
   문서에서는 이렇게 init parameter에 설정을 해도 결과에 대해서는 보장하지 않는다고 되어 있습니다.

관련문서 : Note:295819.1
Upgrading from 9i to 10g - Potential Query Tuning Related Issues