OS Block < Oracle Block < Extent < Segment < Tablespace < Database
Database Block
- I/O의 최소 단위 (I/O -> Input, Output)
- 하나 또는 그 이상의 OS Block으로 이루어짐
- DB_BLOCK_SIZE로 기본 블럭 사이즈 설정
9i 는 4K, 10g 는 8K로 기본 블록사이즈 설정 되어 있음
- 테이블스페이스 생성시 블록 지정 가능, 안하면 기본값으로 설정 됨
Multiple Block Size
- 일반적으로 사용 가능한 Block Size는 총 5개 --> 2K, 4K ,8K, 16K ,32K
- DB_BLOCK_SIZE로 기본 블록 사이즈를 설정해 놓으면 이것이 Standard Block Size 가 되고,
- 나머지 4개는 모두 Nonstandard Block Size
- Standard Block Size
데이터베이스 생성할 때 DB_BLOCK_SIZE를 통해 세팅할 수 있음, 이때 지정하고 나면 바꿀수 없다.
System, Temporary Table Space에 사용됨
- Nonstandard Block Size
DB Cache 와 Data File 블록 사이즈를 맞춰야 함..(?)
생성방법
CREATE TABLESPACE 이름
DATAFILE '경로' SIZE *
BLOCKSIZE * ;
- 아무튼! 이거 사용하는 건 권장사항이 아님. 권장하지 않아!
Database Block 구성 + Utilization Parameter
* HEADER에는 일반적인 블록 정보들, block address나 type of segment 등 중요한 정보들이 들어있음
Free List (빈 블록 목록) 와 Dirty List (쓰고있는 블록 목록)도 관리.
ITL 이라는 정보도 들어있는데,
ITL 이란, Interested Transaction List, 블록 변경을 원하는 트랜잭션의 목록, 블록 변경을 원한느 사람들의 대기자 명단이라고 생각하면 될듯.
1. INITRANS --> 동시에 access 접속 가능한 트랜잭션의 초기개수, 기본값은 1 (쉽게말하면 동시에 접속 가능한 최소인원 수)
2. MAXTRANS --> 동시에 access 가능한 트랜잭션의 최대값, 기본값은 255 (쉽게말하면 동시에 접속 가능한 최대인원)
3. PCTFREE --> update를 위해 남겨지는 빈 공간, 기본값은 10%, 최대 50%
이 공간에는 insert를 할 수 없다, 데이터를 update 했을 때 행의 크기증가에 대비해 여유 공간을 만들어 놓는 것
장점: Row Migration이 적어질 수 있어서 속도 향상
단점: 많은 값을 줬을 때 update가 그만큼 많이 일어나지 않는다면 공간 낭비
4. PCTUSED --> 한번 Dirty List로 된 블록은 일정량이 지워지기 전까지는 계속 Dirty List에 남아있게 설정하는 값, 기본 40%
PCTFREE 공간을 제외한 나머지 저장공간이 다 꽉 차서 Dirty List가 되었을 때,
한 건의 데이터가 삭제되면 공간이 조금이라도 생기기 때문에 다시 Free List로 바뀜
그러다가 다시 insert 작업으로 인해 Dirty List로 바뀌고 다시 계속 이런식으로 반복이 되는데 이러면 부하↑
그래서 PCTUSED를 써서, 40%라고 설정을 해두면,
사용하고 있는 space가 40%가 남을때까지는 Free List로 바뀌지 않고 계속 Dirty List, 상태를 유지함.
PCTFREE 와 PCTUSED는 CREATE TABLE 할때 설정할 수 있음.
Data Block 관리 방법
두가지 방법이 있음 ASSM, MSSM
1. ASSM - Automatic Segment-Space Management
오라클이 자동으로 관리, PCTFREE, PCTUSED의 적당한 값을 찾기는 어려워서 오라클이 자동으로 관리하게끔 하는 방법
Bitmap을 이용해서 블록 사용량을 표시해둔다. I/O 횟수가 줄어들어 성능 up
10g 이후부터는 알아서 ASSM으로 작동됨
2. MSSM - Manual Management
수동으로 관리 = FLM
FLM - Free List Management, Free List를 통해 세그먼트 공간을 관리하는 방법,
사용량을 알수 없어서 I/O가 많이 발생할 수도 있어 성능저하
Extent Allocation / Deallocation
Allocation - 할당
Created, Extended, Altered가 행해질때, 테이블에 내용이 추가되면 저장공간이 더 필요하기 때문에 allocation이 일어남
Deallocation - 해제, 반환
Dropped, Altered, Truncated가 행해질때 쓰고 있던 공간들을 반납 즉, deallocation 일어남
여기서 주의할 점은! Delete 명령을 날렸을 때는 deallocation이 일어나지 않음
delete 명령어 작업할 데이터 건수는 줄어들어도 용량은 줄어들지 않기 때문에 extend 반환이 이뤄지지 않음
Extent
p299 설명해주기 used free extents
Segment
하나 이상의 Extent가 모여서 만들어진 것이 Segment
Object 중에서 저장 공간을 갖고있는 것
데이터를 담고 있는 테이블 but 안의 내용에 따라 이름이 달라진다. (종류를 참고)
종류
- Data Segments -> table, table partition, cluster
- Index Segments -> index-oraganised table, index partition)
- Undo Segments -> rollback segment
- Temporary Segments
Object와 Segment 의 차이!
Object는 오라클에서 데이터를 관리하기 위해 생성하는 모든 것을 말함, table, index, view, sequence, synonym 등등
Segment는 Object 중에서 저장공간을 갖고 있는 것들을 말한다. index, table
보면 Object가 Segment를 포함하는 개념
'오라클 ADMIN' 카테고리의 다른 글
Table (0) | 2013.01.20 |
---|---|
Undo (0) | 2013.01.17 |
Control File, Redo Log File, Data File 관리 연습 (0) | 2013.01.16 |
Tablespace and Data Files (0) | 2013.01.15 |
Redo Log File (0) | 2013.01.14 |