ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 인덱스 클러스터링 팩터[인덱스 튜닝]
    개발 관련 책 읽기/친절한 SQL 튜닝 2022. 9. 19. 00:42
    반응형

    클러스터링 팩터(CF)란 '특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다'

    CF가 좋을수록 검색 효율이 매우 좋다.

    그 이유는, CF가 좋을수록 데이터가 물리적으로 근접해 있다는 의미로 같은 블록 안에서 데이터를 접근할 수 있다는 의미가 된다. => 즉, 블록 I/O 비용이 적게 발생한다는 의미이다.

     

    좀 더 깊게 들어가 본다면 인덱스를 통한 수직적 + 수평적 탐색으로 접근한 Leaf 블록에서 얻은 ROWID로 데이터 블록을 접근하는데 오라클은 래치 획득과 해시 체인 스캔 과정을 거쳐 어렵게 찾아간 테이블 블록에 대한 포인터(메모리 주솟값)을 바로 해제하지 않고 일단 유지한다 - > '버퍼 Pinning'이라고 한다.

     

    이 상태에서 다음 인덱스 레코드의 ROWID를 읽었을 때 '직전과 같은' 테이블 블록을 가리킨다. 그러면 위 과정의 래치 획득 + 해시 체인 스캔 과정을 생략하고 바로 테이블 블록을 읽을 수 있게 된다.

     

    따라서, 논리적인 블록 I/O 과정을 생략을 통해 블록 I/O 비용이 적게 되는 것이다.

     

    CF가 안 좋은 인덱스를 사용하면 테이블을 액세스하는 횟수만큼 블록 I/O가 발생한다.

     

    인덱스 ROWID를 이용한 테이블 액세스는 고비용 구조이므로 읽어야 할 데이터가 일정량을 넘는 순간, 테이블 FULL SCAN 하는 것보다 오히려 더 느려진다. 이를 흔히 '인덱스 손익분기점'이라고 부른다.

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

     

    1.Table Full Scan은 시퀜셜 액세스인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 랜덤 액세스 방식이다.

    2.Table Full Scan은 Multi Block I/O인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 Single BLock I/O 방식이다.

     

    정리하자면, CF가 테이블 엑세스하는 비용에 영향을 끼치게 되므로, CF의 분포도 확인이 꼭 필요하다

     

     

     

    반응형
Designed by Tistory.