본문 바로가기

오라클/오라클 아키텍쳐

INDEX CLUSTERING FACTOR

 

https://pangsun.tistory.com/entry/Clustering-Factor-%EB%9E%80

https://velog.io/@kw78999/DB-Clustering-Fector

Clustering Factor Index 테이블에 대한 정렬정도를 말합니다.

 

정렬정도를 측정하기 위해 오라클은 Clustering Factor 수치를 Index scan하는동안 방문하게되는 Table의 Data block의 개수로 나타냅니다.

 

이는 Clustering Factor 높아지면 읽어 들이는 dataBlock 개수가 많아지기 때문에 PhysicalReads 높게 나온다는 것을 의미합니다.

 

Physical Reads Performance 밀접한 관련이 있기 때문에 Clustering Factor 최소화 하는 것이 튜닝의 중요 요소 하나라고 있습니다.

 

 

Good Clustering Factor

 

Good Clustering Factor Sequence Key Data Type 사용하느 Index 같이 Index 순서와 Table 순서가 거의 완벽하게 일치하는 것을 말합니다.

Clustering Factor 가장 좋은 경우에 클러스터링 팩터가 table Data Block 만큼 발생하게 됩니다.

 

Clustering Factor = 1

 

, FLM 경우에는 freelist 값이 1 이상이며 동시에 insert 작업이 수행되면 동일 블록에 경합이 발생하면서 process들이 서로 다른 free block 사용하게 되어 Clustering Factor 높아지게 됩니다.

그리고 ASSM  경우에는 복잡하고 다차원적으로 free block 관리하기 때문에 최적화된 Clustering Factor 상태에서도 table data block 보다 Clustering Factor 높아지는 경향이 있습니다.

 

 

Bad Clustering Factor

 

Bad Clustering Facotr Good Clustering Factor 반대로 Index key 값이 Random하게 할당되거나 Reverse Index key 같이 Index 순서와 Table 순서가 일치하지 않는 경우를 말합니다.

 

Clustering Factor 가장 나쁜 경우에는 Clustering Factor table row 수만큼 발생하게 됩니다.

이런 경우에는 전체 Data Block에서 1% 데이터만 읽어도 Table Full Scan 하는 경우보다 많은 Cost 발생하기 때문에 DBO Table Full Scan 선택하는 경우가 발생합니다.

 

 

 

 

 

 

 

 

Clustering Factor 값을 줄일 있는 방법은 Index Key 변경하거나 Table 재생성 하는 것입니다. 하지만 Index key 바꾸는 것은 매우 제한적이어서 table 재생성 하는 것이 유일한 방법입니다.

 

Clustering Factor Index Scan Cost와의 연관성

 

Index Scan Cost 계산 공식은 Cost=Blevel + ceil(Leaf Blocks * Index Selectivity) + ceil(Clustering factor * Table Selectivity) 입니다.

보통 Blevel Leaf Block 수는 적은값을 차지하기 때문에

Clustering Factor 주는 영향은 매우 큽니다.

또한 Index Lookup Cost 실제 Data 읽는 일량을 결정하기  때문에 성능 개선에서 Clustering Factor 줄이는 것이 얼마나 중요한지를 있습니다.

 

https://velog.io/@kw78999/DB-Clustering-Fector

 

clustering_factor 값의 계산원리는 아래와 같다.

 

변수clustering_factor를 선언한다.

인덱스 리프블록에서 처음부터 끝까지 스캔하며 rowid로 블록번호를 취한다.

현재의 블록번호와 전의 블록번호가 다르면 변수값을 +1 한다.

 

CF로 무엇을 판별하나?

 

Index Scan의 효율을 판별할 수 있다.

손익 분기점 이라고 부르며, 대개 Index 손익분기점은 5~20% 이다.

100개의 데이터중 5~20개 까지가 인덱스로 스캔하기 적절하다는 뜻이다.

여기서 CF의 개입이 있는데 CF가 나쁠수록 손익분기점은 1%미만 까지 떨어질 수 있다. 반대로 CF가 좋을수록

 90%수준까지 올라가기도 한다

'오라클 > 오라클 아키텍쳐' 카테고리의 다른 글

oracle DBlink  (0) 2022.10.19
Oracle shutdown, no mount, mount, open  (0) 2022.09.20
SQL문의 실행과정  (0) 2022.07.29
오라클 아키택쳐  (0) 2022.07.21
High Water Mark  (0) 2022.07.07