2013년 8월 27일 화요일

클러스터링 테이블

다중 클러스터링의 개념
- 하나의 단위 클러스터 네에 하나이상의 테이블이 존재
- 동일한 클러스터 인덱스를 같는 서로다른 테이블이 같은 클러스터로 같은 위치에 저장되는 것
-클러스터링 테이블은 분리형이나 일체형에서 부탐이던 다량의 조인에 대한 효율을 높여주거나 넓은 범위의 처리에  획기적인 효율 높일수 있는 대안이지만 cost 부담

- 테이블 인덱스 보다 상위 개념이듯 클러스터는 테이블의 상위개념
- 클러스터링 테이블 : 다량의 조인에 대한 효율을 높여주거나 넓은 범위의 처리에 획기적인 효율을 높여줄 수 있습니다.
- 정해진 위치에 데이터를 저장함으로 클러스터링 팩터를 향상 시켜 엑세스 효율을 높이는 저장 방법
장점
-클러스터링에서는 단위 클러스터마다 하나씩 인덱스 로우를 가지고 있음
-단위 클러스터에 여러 로우가 존재하면 한 번 랜덤에 많은 로우를 엑세스
-분포도가 적당하게 넓어야 유리한 것은 기존 인덱스의 단점을 해소하는 경향
cost
엑세스 효율을 향상되지만 삽입,갱신,삭제 부담은 증가 전략적인 인덱스를 구성하여 기존 인덱스를 많이 제거한다면 비용증가 최소화

다중 테이블 클러스터링 실행계획

select ...
from emp e, dept d
where e.deptno = e.deptno
and d.deptno like '11%';

select statement
 nested loops
2) table access (cluster) of dept
1) index (range scan) of 'dept_cluster_idx' (cluster)
3) table access (cluster) of 'emp'

클러스터링 테이블의 부하

sort 된 대상은 입력부하 감소

drop cluster cluster_name
including tables  - 클러스터 내에 테이블이 존재하고 있다면
cascade constraints. - 제약조건이 지정되어 있다면
truncate cluster cluster_name reuse storage; - 스키마 정의를 그대로 사용하겟다면

-drop  table 은 DDL 이지만 Rollback segment 사용
-심각한 부하 발생 우려
-클러스터링 팩터 악화
-Drop 대신 재생성할것
-단위 클러스터를 레코드라 생각하면 클러스터내의 로우들은 필드와 유사 따라서 테이블 Drop은 컬럼 일부를 제거하는 것과 유사하므로 delete 개념이 됨

해쉬 클러스터링의 개념
- 클러스터링 할 컬럼 값을 해쉬 함수로 지정하여 결과 값으로 나온 것을 바탕으로 저장되는것
- 테이블 클러스터링 한다는 것보다 인덱스를 해쉬로 대신하는 개념
-인덱스를 가지지 않고서도 빠른 엑세스가 가능하다는 장점
-size, hashkeys, hash is 파라미터는 변경불가
-'=' 로만 엑세스 가능,
-클러스터가 생성되면서 저장공간이 미리 할당
-저장된 단위 클러스터 보다 많은 로우가 들어오면 오버플로우영역에 저장
-컬럼 값이 고르게 분포되지 않으면 해쉬키 값의 충돌이 발생
-인덱스를 경유하지 않고 해쉬 함수로 계산된 값으로 직접 테이블을 엑세스
-나머지 특징은 인덱스 클러스터와 거리 동일
-인덱스를 생성하지 않고서도 논리적인 계산값을 가지고 데이터 조회

해쉬 클러스터링 활용
-대부분 '=' 로 엑세스 하고,식별자가 차지하는 비율이 높으며. 매우빠른 랜덤 엑세스를 원하는 테이블
-다양한 엑세스 형태를 가지지 않는 테이블일 것
-대량의 데이터를 일정 량의 해쉬 클러스터에 저장시키는 개념을 좀 더 발전한 형태가 바로 해쉬 파티션이므로 이러한 경우라면 차라리 해쉬 파티션을 적용

해쉬 클러스터링의 정의
create cluster [schema].cluster(column datatype, [column datatype]..) - 클러스터와 클러스터 키이 컬럼을 지정
hashkeys integer - 해쉬 클러스터로 생성될 해쉬키 값의 개수 size 값과 더불어 클러스터가 생성될 때 초기 저장공간을 활당하는데 적용
hashkeys expression - 해쉬함수를 지정,사용자가 지정하거나, 기본적으로 제공되는 것을 사용
pctree integer
pctused integer
initrans integer
maxtrans integer
size integer [k|m] - 같은 해쉬키 값을 가지는 로우들을 위해 확보한 단위 클러스터의 크기
storage-clause
tablespace tablespace
해쉬 클러스터의 size 결정
한블록에 지정할 해쉬키의 개수 1
설정할 size 값 : 계산한 size 값

db_block_size/ size 의 결과값은 256을 초과 할수 없다. 즉 한데이터 블록에 최되 256 개 이하로 로우 저장가능

댓글 없음:

댓글 쓰기