율코딩

[오라클] 인덱스 클러스터링 팩터 본문

데이터베이스

[오라클] 인덱스 클러스터링 팩터

레아킴 2022. 10. 2. 20:32
반응형

클러스터링 팩터(Clustering Factor)는 특정 컬럼을 기준으로 같은 값을 같는 데이터가 서로 모여있는 정도를 의미라며, 군집성 계수라고 표현할 수있다.

 

CF(클러스터링 팩터)가 좋은 컬럼에 생성한 인덱스는 검색 효율이 매우 좋다.

예를 들어 거주지역 = '제주'에 해당하는 고객 데이터가 물리적으로 근접해 있으면 흩어져 있을 때보다 데이터를 찾는 속도가 빠르다.

 

CF(클러스터링 팩터)가 좋은 컬럼에 생성한 인덱스는 검색 효율이 좋다라는 의미는,  테이블 액세스량에 비해 블록 I/O가 적게 발생함을 의미한다.

그 이유는, 인덱스 ROWID로 테이블을 엑세스할 때, 오라클은 래치 획득과 해시 체인 스캔과정을 거쳐 어렵게 찾아간 테이블 블록에 대한 포인터(메모리 주소값)를 바로 해제하지 않고 일단 유지한다. 이를 버퍼 Pining이라고 부른다.

 

이 상태에서 다음 인덱스 레코드를 읽었는데, 마침 직전과 같은 테이블 블록을 가리킨다. 그러면 래치 획득과 해시 체인 스캔 과정을 생략하고 바로 테이블 블록을 읽을 수 있다. 논리적인 블록 I/O 과정을 생략할 수 있는 것이다.

 

또한, 인덱스  ROWID를 이용한 테이블 액세스는 생각보다 고비용 구조이다. 따라서 읽어야 할 데이터가 일정량을 넘는 순간, 테이블 전체를 스캔하는 것보다 오히려 느려진다. Index Range Scan에 의한 테이블 액세스가 Table Full Scan보다 느려지는 지점을 흔히 '인덱스 손익분기점'이라고 부른다.

 

인덱스를 이용한 테이블 액세스가 Table Full Scan보다 더 느려지게 만드는 가장 핵심적인 두 가지 요인은 다음과 같다.

  • Table Full Scan은 시퀀셜 액세스인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 랜덤 액세스 방식이다.
  • Table Full Scan은 Multiblock I/O인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 Single Blck I/O 방식이다.

이런 요인에 의해 인덱스 손익 분기점은 보통 5~20%의 낮은 수준에서 결정된다. 그리고 CF에 따라 크게 달라진다.

인덱스 CF가 나쁘면 같은 테이블 블록을 여러 번 반복 액세스를 하면서 논리적 I/O 횟수가 늘고, 물리적 I/O 횟수도 늘기 때문이다.

반응형
Comments