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 |