DataBase Block 

DataBase Block 이란?

- DB 데이터검색과저장의가장기본단위(8K, 16K, 32K, 64K )\

- 모든 보통 DB I/O 는 DB Block 단위로 수행

- Block 당 평균 수십개의 레코드가 들어갈수있는 크기로 구성

- 단 하나의 레코드를 읽을 지라도 최소한1 Block은 Access 해야함 

 

DB 성능에 가장 영향을 미치는게 IO이기에 block 설정이 중요하다 

 - 100byte row 2개를 insert 한다 가정하면, 한 row씩 IO가 발생한다면 너무 비효율적이다. 한번에 2 row를 IO로 내린다  

OS도 block 이 있고 IO가 있는 SW는 다 block 이 있다 . 

 

 

Q. 백만개의 record 가지는 두개의 테이블. 검색속도가 동일 할까?

NO. record 의 크기에 따라 속도가 다르다 

 

Q. 백만개의 record 가지는 두개의 테이블. 컬럼크기, 값 동일하다 . 검색속도가 동일 할까?

NO. "high water mark", "clustering factor" 에 따라 다르다 

 


clustering factor 

cluster : 모여있는 군집

사용자가 자주 검색하는 "비슷한 값들이 얼마나 서로 모여있느냐"에 따라 Access 하는 block건수가 달라짐 

Block Access시 IO 발생하니,  모여있는 정도에 따라 IO횟수 차이가 나게 된다

 

인프런-권철민 강사의 강의자료 발췌

 빨간색을 찾으려고 할때, clustering factor에 따라 Access 하는 block 건 수 가 달라진다.

 

CASE1 : 데이터에따라 지정한 block 에 저장할 경우, clustering factor- 좋음.  select 빠르지만, insert 는 느림 

CASE2 :  여유공간이 있으면 바로 data 넣을 경우 ,  clustering factor- 나쁨 .select는 느리지만, insert는 빠르게 됨 

 

CASE1(clustering factor) 가 항상 좋은가?

 -  color로 조회할 경우엔 빠르겠지만 , 다른 컬럼(알파벳,모양)조건으로 조회할 경우엔 느리다 

 -  즉, 특정 조건(color)이 많이 사용하는 경우엔 위와 같은 데이터 저장 구조가 효율적이지만, 다양한 조건으로 조회할 경우엔 다른 저장구조를 생각해봐야함 

 

index clustering factor

"index row의 순서" 와 "table row의 위치" 가 얼마나 비슷한 수준으로 저장되어 있는가  

인프런-권철민 강사의 강의자료 발췌

* Index는 기본적으로 값이 순차적으로 정렬이 된다

* Index 에는 rid가 mapping 되어있다. 

 

위의 그림을 설명한다면, 

index는 col1 , col2 로 두개 생성되어있고 

table은 4개의 block으로 구성되어있다 

 

1번 SQL을 보면, 

7개의 row를 찾는데 2개의 block 만 Access했다 

- clustering factor가 좋음

 

2번 SQL을 보면, 

3개의 row를 찾는데 3개의 block을  Access했다 

- clustering factor가 나쁨 

 

select 조건에 따라 ->  clustering factor 가 달라지며 -> IO횟수가 달라져 -> 성능차이가 존재하게 된다 

clustering factor는 양날의 검이다 

 

High Water Mark 

아래 블록들이 하나의 Segment 이다 

Data Block들이 모여서 Segment를 이루고 있다

빨간색 라인이 High Water Mark 이다 

 

1. Extent 의 확장 기준 

2. Segment 단위로 하나씩 존재

3. HWM 이전까지만 데이터 저장/

4. Full Scan 시 HWM 까지 확인

5. Data 적은데 Full scan 시간이 오래 걸리면 Segment 축소를 해야함

6. HWM은 5개의 Block 단위로 늘어난다 

7. 늘어는 나도 줄어들지 않는다