본문 바로가기

Oracle/성능 분석과 인스턴스 튜닝 정리

Data Block과 Clustering Factor의 이해

Data Block 이란?

- Oracle DB에서 데이터 검색과 저장의 가장 기본 단위로서 (8K, 16K, 32K, 64K) 단 하나의 레코드를 읽더라도 최소 1 Block은 Access 해야된다.

Segment, Extent, Data Block

Segment, Extent, Data Block

Clustering Factor

Index key Column 을 기준으로 데이터들이 얼마나 잘 정렬 되어 있는지를 나타내는 수치

예) 메모리에 단 하나의 Bloc만들 담을 수 있고 이때 Index scan 시 테이블 블록의 access 횟수 아래 그림은 공부하고 있는 강의 자료에서 보여주는 그림이다

 

(Good / Bad Clustering Factor 비교)

Good / Bad Clustering Factor

즉 CF가 높을수록 db file sequential read 대기가 증가할 수 있는 가능성이 존재합니다. CF 값은 ANALYZE 명령문이나, DBMS_STATS 패키지를 이용해서 확인할 수 있습니다.인덱스에 대해 통계정보를 생성하면 DBA_INDEXES.CLUSTERING_FACTOR에 CF의 값이 입력됩니다. CF 수치는 테이블의 블록 수에 가까울 수록 좋고, 로우 수에 가까울수록 좋지 않습니다. 성능 문제의 원인이 CF인 경우, 테이블을 인덱스의 정렬순서와 동일한 순서로 재생성함으로써 해결할 수 있습니다. 하지만 테이블 재생성은 해당 테이블을 참조하는 다른 인덱스 성능에 영향을 미치므로 신중하게 고려해야 합니다.

High Water Mark

- 대량의 자료를 입력 할 경우 입력을 위한 공간을 먼저 확보한 뒤 입력을 수행하는데 이때

확보된 공간의 끝을 표시해 주는 것을 하이워터마크 라고 한다.

또한 이후 데이터를 삭제 하더라도 확보된 공간은 반환되지 않기 때문에 테이블을 스캔시

빈 공간을 모두 읽게되고 당연히 성능은 떨어지게 된다.

TRUNCATE를 하게되면 테이블 데이터를 초기화 하고 공간을 반환한다.