아흐..
지난 주 스터디 하면서 자신있게 Partition Table 과 관련하여 발표 도중
Partition Local index 에서 맨붕이 와버렸다..
그래도 내가 알려주는거에 대한 책임감(??변명..) 때문에 다음에 다시 발표하겠다 한 후
이제서야 테스트 하면서 결과에 대해서 공유해 본다.
1. 파티션 테이블 생성
SQL> create table test_a
(col1 number,
col2 number,
col3 varchar2(20))
Partition by range (col1, col2)
(Partition part_test_a_1 values less than (10, 100),
Partition part_test_a_2 values less than (20, 200) ,
Partition part_test_a_3 values less than (30, 300) ,
Partition part_test_a_4 values less than (40, 400) );
SQL> create Index ix_test_a on test_a(col1, col2) Local
(Partition in_test_a_1 ,
Partition in_test_a_2 ,
Partition in_test_a_3 ,
Partition in_test_a_4 );
조회해 보면 아래와 같다
하지만 책에는 아래와 같이 나와 있다.
SQL> create index ix_test_a on test_a(col1, col2) local;
확인해 보면 partition_name 만 틀릴 뿐 나머지는 동일하다.
partition name 은 어떻게 되는걸까?
Table를 다시 생성해 본다
SQL> create table test_c
(col1 number,
col2 number,
col3 varchar2(20))
Partition by range (col1, col2)
(Partition test_c_1 values less than (10, 100),
Partition test_c_2 values less than (20, 200) ,
Partition test_c_3 values less than (30, 300) ,
Partition test_c_4 values less than (40, 400) );
SQL> create index ix_test_c on test_c(col1, col2) local;
Index Partition_Name은 명시해 줄 경우 명시된 partition 이름으로 가며,
명시안하는 경우 Partition Table의 partition name을 따라가는 것을 확인할 수 있다.
왜 이렇게 쉬운 부분에서 멘붕이 오냐고 질책할 수 있지만...내 잘못입니다...ㅠㅠ
테스트 꼭 해보고 책도 한번씩 쿼리 다 작성해서 결과확인 후 진행 하도록 하겠습니다.
죄송합니다.ㅠ
한가지 더 테스트로 Local index 를 명시하되, 파티션 table과 동일한 갯수로 생성을 안하면 어떻게 되는걸까,
SQL> create Index ix_test_a on test_a(col1, col2) Local
(Partition in_test_a_1 ,
Partition in_test_a_2 ,
Partition in_test_a_3);
우리가 책에서 배웠듯이 에러가 발생한다.
아래는 내가 어떤 자료를 보고 정리한 내용이다.
구분
|
적용 기준 및 고려 사항
|
비 파티션
|
- 파티션 키 칼럼이 조건절에 누락되면 여러 인덱스 파티션을 액세스해야 하므로 비효율적. 특히, OLTP 환경에서 성능에 미치는 영향이 크므로 비파티셔닝 전략이 유용할 수 있음 - NL Join 에서 파티션 키에 대한 넓은 범위검색 조건을 가진 Inner 테이블 액세스 용도로 인덱스 파티션이 사용된다면 효율적 -> 비파티션 인덱스 사용을 고려 - 파티션 인덱스를 이용하면 sort order by 대체 효과 상실. Sort 연산을 대체함으로써 부분범위 처리를 활용하고자 할 땐 비파티셔닝 전략이 유용 - 테이블 파티션 이동, 삭제 등의 작업 시 unusable 되므로 적용 시 주의 |
Global Prefixed
|
- 인덱스 경합 분산에 효과적 - 여러 Local 인덱스 파티션을 액세스하는 것이 비효율적일 때 대안으로 활용 가능 - 테이블 파티션 이동, 삭제 등의 작업 시 unusable 되므로 적용 시 주의 |
Local Prefixed
|
- 관리적 특면에서 유용 : 테이블 파티션에 대한 추가, 삭제 등의 작업이 빈번할 때 - 이력성 데이터를 주로 관리하는 DB 환경에 효과적 - 파티션 키 칼럼이 “=” 조건으로 사용될 때 유용 - 파티셔닝 칼럼에 대한 검색 조건이 없으면, 인덱스 선두 칼럼이 조건절에 누락된 것이므로 정상적인 사용이 불가 (Index Full Scan 으로는 선택 가능) - 파티션 키 칼럼(=인덱스 선두 칼럼)이 Like, Between, 부등호 같은 범위검색 조건일 때 불리 |
Local Non Prefixed
|
- 관리적 측면에서 유용 : 테이블 파티션에 대한 추가, 삭제 등의 작업이 빈번할 때 - 이력성 데이터를 주로 관리하는 DB 환경에 효과적 - 파티션 키 칼럼이 조건절에 사용될 때 유용 - 파티셔닝 칼럼에 대한 검색 조건이 없으면 인덱스 파티션 전체를 액세스하는 비효율이 발생할 수 있으므로 주의 - 파티션 키 칼럼이 범위검색 조건으로 자주 사용된다면 Local Prefixed 보다 Local NonPrefixed가 유리. 그렇더라도 좁은 범위검색이어야 함 |
'Oracle > DBA' 카테고리의 다른 글
[펌][ORACLE] ORA-에러 (0) | 2015.12.22 |
---|---|
[Oracle] Index monitoring (0) | 2015.12.14 |
[ORACLE] ASM 에 Datafile 추가 (1) | 2015.11.25 |
[Oracle] OWI Latch & Lock 정리 (0) | 2015.11.24 |
[펌][Oracle] 대용량 자료전환 시 튜닝 포인트 - Hash join (0) | 2015.11.19 |