메뉴 건너뛰기

bysql.net

4.2. 클러스터링 형태의 결정 기준

2010.11.26 05:52

pranludi 조회 수:8446

4.2. 클러스터링 형태의 결정 기준

대용량_1-4-13.png
TAB3, TAB4 는 대용량 테이블
TAB3.col3 은 매우 빈번하게 사용 되어 진다.
TAB4.col4 으로 자주 넓은 범위처리를 하고 있다고 가정하면 
포괄적인 클러스터링 : TAB3+TAB2+TAB1
부분적인 클러스터링 : TAB1+TAB2
단일테이블 클러스터링 : TAB3.col3, TAB4.col4
이렇게 클러스터링을 할 수 있다.
하지만, 실무에서는 다양한 형태의 테이블들이 존재하므로 업무 상황을 감안해서 결정해야 한다.

1. 클러스터링 형태 판단 기준 ( 1-4-13 그림 기준으로 )

4.2.1. 포괄적인 클러스터링

- 두 테이블 간의 클러스터링이 아니고 그 이상을 결합하는 경우를 지칭한 것.
- tab1 -> tab2 -> tab3 순으로 수식 계열로 내려갈수록 데이타량은 증가한다.
- tab3 경우는 밀도가 매우 높으나 tab2, tab1 으로 갈수록 밀도가 낮아 진다.
- tab1, tab2 만 액세스할 경우 많은 블록을 액세스해야 한다.
- 다수의 테이블을 클러스터링 하는 것은 현재의 사용형태뿐만 아니라 향후에 예상되는 액세스 형태를 감안할 필요가 있음.
- 가능하다면 최소한의 테이블이 클러스터링 되도록 다른 대안을 강구하는 것이 중요하다.

4.2.2. 부분적인 클러스터링( 단일 테이블 클러스터링 )

- 클러스터링을 하더라도 단위 클러스터가 지나치게 커지지 않고
- 저장 밀도도 크게 나쁘게 하지 않으며
- 업무적인 결합도도 양호한 형태로 하는 것.
- tab1 + tab2 만 다중테이블 클러스터링, tab3.col3은 단일테이블 클러스터링을 하는 형태

4.2.3. 단일테이블 클러스터링( 그래서 )

- 현실에서는 다양하게 클러스터링 되는 경우는 매우 드물다.
- 조인의 효율성 향상을 위한 다중 클러스터링은 가능한 피하는 것이 좋다.
- 대량의 범위를 자주 처리하는 테이블만 클러스터링을 한다.

2. 단위 클러스터링 크기 결정

4.2.4. 단위 클러스터링 크기 결정

- 가능하다면 로우의 길이가 길지 않을수록 좋고
- 단위 클러스터의 크기를 지나치게 크지 않도록 하는 것이 바람직함
- 단위 클러스터의 크기는 단지 하나의 블록에 몇 개의 단위 클러스터를 생성하도록 허용할 것인가를 좌우할 뿐.
- 계산 방법
(1) 블록당 유효 저장공간 크기 = (블록 크기 - 블록헤더 크기) * (100-pctfree) / 100
(2) 로우의 평균 길이 산정
(3) 클러스터키 별 로우 수를 구한다.
(4) 단위 클러스터의 크기를 계산하고 결정한다.
- 생성 방법
(1) 클러스터를 생성
CREATE CLUSTER sales_cluster (sale_date varchar2(8))
STORAGE ( storage_clause.... ) PCTFREE 10 PCTUSED 60 SIZE 2000;
(2) 클러스터 인덱스 생성
CREATE INDEX sales_cluster_idx ON CLUSTER sales_cluster;
(3) 기준 테이블의 명칭을 변경
RENAME sales TO sales_copy;
(4) 클러스터 내에 테이블 생성.
CREATE TABLE sales ( 
... 
) CLUSTER sales_cluster ( sale_date );
(5) 데이터 저장
INSERT INTO sales SELECT * FROM sale_copy WHERE sale_date > '20010101';
(6) 기존 테이블 삭제
DROP TABLE sales_copy;


3. 클러스터를 사용하기 위한 조치 

4.2.5. 클러스터 사용을 위한 조치

- 클러스터 키 컬럼을 첫 번째로 하는 결합 인덱스를 생성시키지 말 것
클러스터 키를 사용하지 않고, 결합 인덱스를 사용할 수 있다.

- 클러스터가 반드시 사용되어지기를 원한다면 액세스 경로를 고정시킨다.
힌트 /*+ CLUSTER(sales) */ 을 사용해서 결합 인덱스 사용하더라도 클러스터를 사용하도록 한다.

번호 제목 글쓴이 날짜 조회 수
35 진행기록 운영자 2011.08.23 3552
34 2.3.조인 종류별 특징 및 활용방안 (3/4) (2.3.4~2.3.5) 실천하자 2010.12.08 15346
33 1.4. 부분범위처리로의 유도(1/2) (1.4.9) 실천하자 2010.12.08 14430
32 2.3.4. 해쉬(Hash) 조인 / 2.3.5. 세미(Semi) 조인 pranludi 2010.12.05 8607
31 2.1.조인과 반복연결(loop query)의 비교 pranludi 2010.12.05 11447
30 제2장. 조인의 최적화 방안 pranludi 2010.12.05 6575
29 1.4.9. 웹 게시판에서의 부분범위 처리 pranludi 2010.12.05 6775
28 2.3.조인 종류별 특징 및 활용방안 (1/4) (2.3.1) file 노랑배 2010.12.04 9477
27 2.3.조인 종류별 특징 및 활용방안 (2/4) (2.3.2~2.3.3) file 실천하자 2010.12.03 12561
26 2.2.연결고리 상태가 조인에 미치는 영향 file 노랑배 2010.12.03 9151
25 제1장. 부분범위처리(Partial range scan) file supersally 2010.12.01 12321
24 1.4. 부분범위처리로의 유도(1/2) (1.4.1 ~ 1.4.8) file 실천하자 2010.11.26 19346
» 4.2. 클러스터링 형태의 결정 기준 file pranludi 2010.11.26 8446
22 4.1. 인덱스의 선정 기준 (2/2) (4.1.6.) [1] file 실천하자 2010.11.15 16804
21 제4장. 인덱스 수립 전략 노랑배 2010.11.13 7768
20 4.1. 인덱스의 선정 기준 (1/2) (4.1.1.~4.1.5.) [2] file 노랑배 2010.11.13 23370
19 3.2.5. 기타 특수한 목적을 처리하는 실행계획 pranludi 2010.11.09 11332
18 3.3. 실행계획의 제어 file supersally 2010.11.08 11134
17 3.2.4. 비트맵(Bitmap) 실행계획 file 실천하자 2010.11.08 12833
16 3.2 실행계획의 유형 pranludi 2010.10.19 4929