본문 바로가기
데이터베이스

데이터베이스 B-Tree클러스터 엑세스(Cluster access)

by 다시쓰는 2023. 10. 6.
반응형
B-Tree클러스터 엑세스(Cluster access)

 클러스터링을 한 테이블의 형태는 두 가지가 있다. 한가지는 대량의 범위처리의 효율화를 목적으로 한 단일 테이블 클러스터링이고 다른 한 가지는 조인의 효율적인 연결을 위해 두 개 이상의 테이블을 하나의 클러스터에 저장하는 방법이다.

 1:M 관계를 가진 두 테이블을 클러스터링을 하면 동일한 클러스터 키 값을 가진 두 테이블의 모든 로우는 같은 클러스터 내에 저장된다. 이러한 경우에 만약 '1'쪽의 테이블 클러스터 키로 엑세스하면 하나의 로우가 나타나겠지만 'M'쪽을 엑세스하면 여러 개의 로우가 나타날 것이다. 

 

해쉬 클러스터 액세스(Hash cluster access)

 클러스터는 데이터의 클러스터링 팩터를 높여 물리적인 I/O의 효율을 향상시키기 위한 방법이다. 해쉬 클러스터는 해쉬함수에 의해서 만들어진 해쉬값을 이용하여 클러스터링을 하는 방법이다.

 동일한 해쉬값을 가진 데이터를 동일한 블록 내에 저장하여 클러스터링 팩터를 높인다.

 인덱스를 이용하여 데이터를 액세스하는 방법은 반드시 인덱스 I/O와 테이블 I/O를 거쳐야 하지만 해쉬 클러스터의 데이터 접근경로는 해쉬함수를 생성하는 것과 테이블 I/O로만 구성되므로 그만큼 I/O를 줄일 수 있다.

 넓게 산포된 테이블의 액세스에서 디스크I/O를 줄임으로써 시스템 성능향상을 기대할 수 있다.

 만약 테이블 크기가 작아서 메모리 적중률이 높다면 유일 인덱스 스캔이 약간 더 유리할 수도 있지만 적중률이 낮은 대용량의 테이블의 랜덤 액세스에서는 약 30%정도의 개선효과가 있다.

 해쉬 클러스터는 생성 시에 부여한 'HASHKEYS * SIZE'에 의해서 초기 저장공간의 크기가 결정된다. 해쉬 클러스터는 성성 시에 미리 물리적 디스크 공간을 확보한다. 따라서 지속적인 데이터의 증가가 심하게 발생하는 경우에는 적절하지 않다.

 해쉬 값의 개수는 클러스터 생성 시에 부여한 HASHKEYS에 의해서 결정되며, 이 값보다 크면서 가장 작은 소수가 해쉬 값의 개수가 된다. 클러스터 생성시에 처음 할당된 해쉬 값의 블록을 루트 블록이라고 한다.

 해쉬 클러스터를 적용할 수 있는 곳은 우편번호 테이블,  시스템사용자 정보이다.

 

표본 테이블 액세스(Sample table scan)

 전체테이블 스캔은 모든 로우를 스캔하기 위하여 테이블에 관련된 모든 블록을 차례로 읽고, 각 로우마다 조건절을 만족하는지 확인한다. 인덱스 스캔은 인덱스를 이용하여 처리할 범위를 스캔하여 테이블에 관련된 블록을 랜덤하게 읽는다.

 표본 테이블 스캔 방식은 테이블의 데이터 중에서 사용자가 부여한 비율 만큼의 데이터를 읽고 그 중에서 조건을 만족하는 로우들을 리턴한다.

 

 SELECT ......................

 FROM TABLE_NAME SAMPLE {BLOCK option} (sample Percent)

 WHERE .......................

 GROUP BY .................

 HAVING ...................

 ORDER BY ..............

- SAMPLE {BLOCK option}를 사용하면 전체 액세스 대상 블록에서 지정한 비율(SAMPLE PERCENT)만큼의 블록을 읽은 후 조건을 만족하는지 확인한다. 여기서 지정한 숫자는 확률 값을 의미할 뿐 수행할 때마다 다른 블록이 나타날 수 있다.

- SAMPLE (sample Percent)를 지정하면 모든 블록이 액세스되지만 각각의 블록에서 지정한 비율만큼의 로우들을 임의로 선택한 후 이를 대상으로 조건을 체크하여 결과를 리턴한다. 이 때도 지정한 비율은 단지 확률 값에 불과하므로 항상 일정한 값이 나타나지 않는다.

-  비율 (sample Percent)는 0.0000001와 99.99999 값을 지원하며, 0또는 100을 지원하지 않는다.

- 로우 수가 작은 테이블에서 견본 테이터를 액세스하면 일정 비율의 데이터가 리턴되지 않을 수도 있다. 동일 SQL을 반복해서 수행해도 항상 같은 블록이나 같은 수가 아닐 수 있으며 동일한 로우를 리턴하는 것도 아니다.

- 이 기능을 사용하면 비용기준 옵티마이져를 사용하게 되며 규칙기준은 지원되지 않는다.

 

 표본 테이블 스캔을 이용하여 활용하는 형태는 몇가지가 있다. 

첫 번째는 데이터 마이닝(Data Mining)에서 활용하는 것이고

두 번째는 데이터 정제(Cleansing)를 위해 데이터의 오류 패턴을 찾아내는데 활용하는 경우

세 번째는 테스트를 위해 표본 데이터를 생성할 때 적용한다.

반응형