Oracle 11g Interval Partition의 버그
오라클 2008.02.09 13:19SQL> drop table t_int_part purge;
테이블이 삭제되었습니다.
SQL>
SQL> CREATE TABLE t_int_part ( part_key number )
2 PARTITION BY RANGE (part_key) INTERVAL(10)
3 ( PARTITION p0 VALUES LESS THAN (10) )
4 ;
테이블이 생성되었습니다.
SQL> -- 인덱스 생성
SQL> ALTER TABLE t_int_part ADD CONSTRAINT t_int_part_pk PRIMARY KEY (part_key) USING INDEX LOCAL;
테이블이 변경되었습니다.
-- 12건의 데이터 생성. 이 과정에서 세 개의 Partition이 동적으로 생성된다.
SQL> insert into t_int_part values(2);
SQL> insert into t_int_part values(4);
SQL> insert into t_int_part values(6);
SQL>
SQL> insert into t_int_part values(12);
SQL> insert into t_int_part values(14);
SQL> insert into t_int_part values(16);
SQL>
SQL> insert into t_int_part values(22);
SQL> insert into t_int_part values(24);
SQL> insert into t_int_part values(26);
SQL> -- 주의!!! 아래 과정에서 비연속적인 Internval에 의한 파티션이 생긴다.(10,20,40)
SQL> insert into t_int_part values(42);
SQL> insert into t_int_part values(44);
SQL> insert into t_int_part values(46);
SQL> commit;
커밋이 완료되었습니다.
-- 파티션 확인
SQL> select partition_name from dba_tab_partitions where table_name = 'T_INT_PART';
PARTITION_NAME
------------------------------
SYS_P84
SYS_P85
P0
SYS_P83
-- Full Table Scan. 정상적으로 12건이 나온다.
SQL> select /*+ full(t_int_part) */ * from t_int_part;
PART_KEY
----------
2
4
6
12
14
16
22
24
26
42
44
46
12 개의 행이 선택되었습니다.
-- Index Full Scan. 정상적으로 12건이 나온다.
SQL> select /*+ index(t_int_part) */ * from t_int_part;
PART_KEY
----------
2
4
6
12
14
16
22
24
26
42
44
46
12 개의 행이 선택되었습니다.
-- Index Range Scan. 정상적으로 12건이 나온다.
SQL> select /*+ index(t_int_part) */ * from t_int_part where part_key > 0;
PART_KEY
----------
2
4
6
12
14
16
22
24
26
42
44
46
12 개의 행이 선택되었습니다.
-- Index Fast Full Scan. 12건이 아니라 9건이 나온다.
SQL> select /*+ index_ffs(t_int_part) */ * from t_int_part;
PART_KEY
----------
2
4
6
12
14
16
22
24
26
9 개의 행이 선택되었습니다.
위의 테스트 결과를 보면 Index Fast Full Scan의 경우 비연속적인 마지막 파티션(42,44,46의 값)을 인식하지 못하는 것을 확인할 수 있다. 반면 Table Full Scan, Index Range Scan, Index Full Scan에서는 이런 오류가 없다.
위의 내용은 Oracle Forum에서 한 사용자의 질문에서 시작되어 결국 오라클의 버그로 판명났다. 아마 다음 패치때 수정된 버전이 제공될 것이다. 그 전까지는 Oracle 11g에서 Interval Partition을 사용하는 경우에는 Index Fast Full Scan이 비정상적으로 작동한다는 사실을 잘 기억해야 할 것이다.
Oracle Forum의 원문은 여기를 참조한다.
'오라클' 카테고리의 다른 글
Oracle 10gR2의 Autotuned MBRC (2) | 2008.02.11 |
---|---|
Must Read Oracle Books Before You Retire (0) | 2008.02.10 |
Oracle 11g Interval Partition의 버그 (3) | 2008.02.09 |
Session cached cursors와 v$open_cursor (4) | 2008.02.05 |
dbms_stats.auto_invalidate에 대한 새로운 사실... (0) | 2008.02.03 |