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. 늘어는 나도 줄어들지 않는다
'DBMS > Oracle' 카테고리의 다른 글
OLTP란 Batch Process (0) | 2024.02.27 |
---|---|
[DBMS] 과연 Index scan(Random Acces)가 빠른것인가? (Random Access vs Sequential Access & Index Scan vs Full Scan) (0) | 2024.02.26 |
[DBMS] DB성능에 미치는 요소/ scan 방법 간단설명 (0) | 2024.02.25 |
[Oracle] Architecture(간단) (0) | 2024.02.25 |
SwingBench(stresstool) 사용하기 - Order Entry 스키마/데이터 생성 및 SwingBench 구동 (oewizard.bat ) (0) | 2024.02.25 |