_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › 클러스터링팩터
|
|
[edit]
1 랜덤 액세스 #선택도와 실행계획의 분리에서 실행계획의 재사용으로 I/O가 5배 정도 많은 것을 보았다. 같은 테이블의 같은 데이터를 리턴하는데 왜 더 많은 I/O가 일어났을까? 그것은 논클러스터드가 각 인덱스의 중간 노드를 거쳐 임의의 여러 페이지(MSSQL SERVER의 최소 입/출력 단위, 8KB)를 접근했기 때문이다. 이렇게 접근하는 방법을 랜덤액세스(MSSQL Server의 실행계획에는 Bookmark Lookup이라고 한다)라고 한다. 만약 해당 데이터 페이지가 메모리에 로드되지 않았다면 물리적인 I/O가 발생하게 된다. 그러므로 물리적 I/O를 최소화하기 위해서는 DBMS의 최소 입출력 단위 내에 데이터를 꽉꽉 채워야 물리적 I/O가 감소하는 것을 알 수 있다.
[edit]
2 사례 #다음과 같이 QUERY 한다고 해보자. 논클러스터드 인덱스는 ID에 잡혀 있다고 가정하고, 선택도도 좋다고 가정한다.
SELECT * FROM TAB WHERE ID IN (1, 2, 3) 위와 같이 QUERY했다고 가정했을 때 클러스터링 팩터에 따라서 물리적 I/O가 달라질 수 있다는 것이다. 만약 1, 2, 3이 아래 그림처럼 각각의 실제 페이지에 분산되어 있다면 결국 3개의 페이지[1]에 대한 접근이 일어나야 한다는 것이다.
![]() 그러나 아래의 그림처럼 페이지1에 모두 1, 2, 3이 있다면 실제로 1개의 페이지만 접근하면 되는 것이다. (물리적 I/O 비용은 디스크에서 메모리로 데이터를 올리는 것을 말한다.)
![]() ----
[1] 아마도 모든 상용 DBMS 제품은 최소 입/출력 단위가 있을 것이다. SQL Server의 경우는 8KB로 고정이고, Oracle Server의 경우는 2KB, 4KB, 8KB 등과 같이 지정할 수 있다. |
당신은 당신이 생각하는 대로 살아야 합니다. (폴 발레리) |