새로쓴 대용량 데이터베이스솔루션 1 (2011년)
클러스터링 테이블 0 0 67,949

by 구루비스터디 클러스터링 테이블 [2013.09.11]


  1. 1.3.1 클러스터링 테이블의 개념
  2. 1.3.2 단일 테이블 클러스터링
  3. 1.3.3 다중 클러스터링
  4. 1.3.4 클러스터링 테이블의 비용
  5. 1.3.5 해쉬 클러스터링


1.3.1 클러스터링 테이블의 개념


인덱스의 단점
  • 분리형의 단점 : 대량의 데이터를 범위처리 시 많은 랜덤 액세스를 발생시키는 부담이 있음
  • 일체형의 단점 : 특정 액세스에서는 랜덤 액세스의 부하가 감소하나, 다양한 액세스를 모두 수용하지 못하면서 오히려 더 많은 부담이 발생


  • DBMS에서의 클러스터란 테이블이나 인덱스처럼 저장공간을 가지고 있는 하나의 오브젝트
  • 클러스터는 테이블의 상위 개념(EX : 테이블은 인덱스의 상위 개념임)
  • 클러스터로 생성된 오브젝트 내에 테이블이 생성됨
  • 테이블이 없는 클러스터는 어떤 데이터도 입력할 수 없음


다중 클러스터와 단일 클러스터로 구분됨
  • 다중 클러스터 : JOIN에 필요한 컬럼을 클러스터 키로 생성, 같은 클러스터내의 컬럼은 미리 조인됨
  • 단일 클러스터 : 하나의 테이블에서 특정 컬럼을 클러스터 키로 생성하여 액세스의 효율성을 높임(동일한 값을 같은 장소에 저장)

클러스터의 종류
  • 인덱스 클러스터 : 인덱스를 경유하여 클러스터를 찾아감
  • 해쉬 클러스터 : 해쉬 함수를 이용하여 클러스터를 찾아감


  • 클러스터링 팩터란 : 액세스하고자 하는 데이터가 모여진 정도를 의미


1.3.2 단일 테이블 클러스터링

  • 클러스터에 하나의 테이블만을 생성시킴
  • 같은 클러스터 컬럼 값을 가진 로우는 같은 장소에 저장되므로 넓은 범위의 데이터를 동시에 액세스하고자 할 때 주로 활용



  • 일반 테이블과 Cluster 비교
  • 일반 테이블과 달리 클러스터 인덱스는 클러스터 키 컬럼 값마다 단 하나씩만 존재한다.


클러스터 스캔 방식
  • 클러스터 인덱스에 있는 클러스터ID 정보를 통해 해당 클러스터를 찾는 작업
  • 클러스터 컬럼의 조건을 '='이 아닌 'Between' , 'Like' 등을 사용할 경우 인덱스의 처리범위가 끝날 때까지 클러스터 스캔을 반복함


클러스터 특징
  • 클러스터에 동일한 클러스터 키 값이 모두 표시되지만 물리적으로는 단 한번만 저장됨
  • 각각의 로우는 클러스터 ID를 가지고 있어 블록헤더에는 클러스터 키 ID와 클러스터 값을 가지고 있음
  • 클러스터 값이 수정될 경우 정해진 위치에 저장되어야 하는 클러스터의 특성상 다른 위치로 이동할 수 밖에 없음
  • ROWID의 변경이 발생하므로 일반 인덱스에 문제를 일으킴
  • ROWID는 그대로 있고 ROW Migration이 발생함


1.3.3 다중 클러스터링


다중 클러스터링 이란 ?
  • 단위 클러스터에 두 개 이상의 테이블을 함께 저장하는 것
  • 같은 클러스터 키 컬럼 값을 가진 각 테이블의 로우는 정해진 장소에 같이 저장되므로 테이블 조인 속도를 향상 시키고자 할 때 주로 사용
  • 각 로우에는 클러스터 키 ID를 가지고 있으며, 블록헤더에 클러스터 정보를 가지고 있으므로, 단위 클러스터에는 동일한 값인 클러스터 키 값을 가질 필요가 없으며 클러스터 키 값은 실제로 저장되지 않음

SELECT *
FROM EMP E, DEPT D
        WHERE E.DEPTONO = D.DEPTNO
           AND D.DEPTNO  = '111';
---------------------------------------------------------
Execution Plan
SELECT STATEMENT
NESTED LOOPS
  TABLE ACCESS (CLUSTER) OF DEPT
    INDEX (UNIQUE SCAN) OF 'DEPT_CLUSTER_IDX' (CLUSTER)
  TABLE ACCESS (CLUSTER) OF EMP


  • 클러스터로 묶인 테이블끼리 조인을 수행하는 경우 성능 향상
  • 클러스터 컬럼이 수정되면 데이터 값이 수정됨으로 추가적인 클러스터 체인 블록이 발생하므로 클러스터링 효율이 감소


1.3.4 클러스터링 테이블의 비용


클러스터링의 역할
  • 클러스터링의 부하를 감수할 수 있는 상황이거나 클러스터링의 도입만이 유일한 대안일 경우만 사용


클러스터링으로 인한 부하
  • 클러스터링은 단지 조회의 효율만 높여줄 뿐이며 DML시 부하 발생


(가) 입력 시 부하
  • 정해진 위치를 찾아서 저장하므로 일반 테이블에 비해 추가적인 부하가 발생
  • 값에 따라 저장 위치가 다르므로 프리리스트를 요구하는 횟수가 증가


(나) 수정 시 부하
  • 클러스터 키를 수정하는 부하
    • ROW MIGRATION 발생으로 인한 부하 발생
    • 클러스터 체인으로 인한 클러스터링 팩터가 나빠짐
  • 클러스터 키 이외의 컬럼을 수정하는 부하
    • 일반 테이블과 동일


(다) 삭제 시 부하
  • 추가적인 부하 없음


1.3.5 해쉬 클러스터링


해쉬 클러스터링의 특징
  • SIZE, HASHKEYS, HASH IS 파라미터를 변경할 수 없음
  • = 로만 액세스 가능
  • 클러스터가 생성되면서 저장공간이 미리 할당
  • 지정된 클러스터보다 많은 로우가 들어오면 오버플로우 영역에 저장
  • 컬럼 값의 분포가 고르지 않으면 해쉬 Collision 발생
  • 인덱스를 경유하지 않고 액세스하므로 인덱스 보다 효율적인 액세스를 할 수 있음


해쉬 클러스터링의 활용 범위
  • 각종 코드를 관리하는 테이블, 우편 번호, 시스템 사용자 정보를 관리하는데 활용
  • 해쉬 클러스터에 저장시키는 개념의 좀 더 발전한 형태가 해쉬 파티션이므로, 해쉬 파티션을 적용하는 것이 옳음


해쉬 클러스터링의 정의 -> 해쉬 클러스터의 적용을 결정한 경우
  • 클러스터 명칭과 클러스터 키를 정의
  • Hashkeys : 해쉬 키 값의 개수 -> 지정한 값 보다 큰 소수로 할당
  • HashIs : 해쉬 함수를 정의할 수 있음 -> 키 분포를 고려해야 함
  • Size : 같은 해쉬 값을 가지는 로우를 위해 확보할 클러스터의 크기를 의미 -> 계산 예제는 57Page 참조


단일 테이블 해쉬 클러스터
  • 개념은 인덱스 클러스터에서 설명한 것과 유사함
"구루비 데이터베이스 스터디모임" 에서 2011년에 "새로쓴 대용량 데이터베이스 솔루션1" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/2602

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입