데이터베이스의 데이터가 어떻게 담겨있는지 논리적 구조에 대해 알아보자.
DB속 데이터는 data file 에 저장된다. 그리고 데이터 파일들은 Table Space 라는 논리적 저장공간에 담겨있다.
Oracle DB에서의 논리적 단위는 아래와 같이 네가지로 나뉜다.
Tablespace
>Segment
>Extent
>Data Block
Tablespace
는Segment
를 담는 컨테이너이다.Segment
는Extent
들로 구성되어 있으며Extent
는Data block
들의 모음이다.
Data Block은 Page 또는 Oracle Block 이라고도 불린다.
데이터는 실질적으로 data block(이하 블록)에 저장되어 있다. 즉, DBMS가 데이터를 읽고 쓰는(I/O) 단위는 블록 단위이다.
뿐만아니라 운영체제 또한 블록 단위로 디스크를 읽고 쓴다. DB의 Block 단위는 OS Block 보다 크다. (DB Block > OS Block)
- DB(Table, Index), OS ⇒ Block 단위 I/O
Oracle DB에서 블록의 크기는 보통 8KB 크기를 가진다. 이는, 단순히 하나의 컬럼처럼 작은 양의 데이터를 불러오려해도 8KB 크기의 블록을 모두 읽어와야한다는 것을 의미한다.
- 제일 작은 크기의 블록은
2KB
이다.
- 블록 사이즈 지정
데이터 블록 사이즈는DB_BLOCK_SIZE
파라미터를 통해 설정 한다.
사용자가 이를 직접 지정해주지 않았다면 OS가 제공해주는 기본 사이즈로 자동 지정된다. 이는 OS 마다 다르지만 보통4KB
또는8KB
로 설정되어 있다.
[MySQL] MySQL 의 Block 단위는 16K
mysql> SHOW variables like 'innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.06 sec)
[OS]
getconf PAGESIZE
4096
Extent
는 데이터블록이 모여 만든 저장공간 으로 보면 된다.
Tablespace
내부의 Extent
를 관리하는 방법은 두 가지가 존재한다.
사용자가 어떠한 방법을 선택했느냐에 따라 Oracle DB 는 Extent 를 달리 관리한다.
-
Dictionary Managed Tablespace
과거 Oracle Version 8 까지 차용되던 방법으로써 데이터 딕셔너리(data dictionary)를 통해 Extent를 관리한다.- I/O Bottleneck 의 문제로 인해 현재는 Locally Managed 방식이 사용된다.
-
Locally Managed Tablespace
기본 세팅은 Locally Managed 로 되어 있다.
비트맵(bitmaps)을 이용해 Extent를 관리한다.- ASSM: Automatic Segment Space Managment
ASSM 의 장점은 아래와 같다.- 관리하기가 단순해짐
수동으로 관리할 필요가 없다. - 동시성이 향상됨
다수의 transaction이 동시적으로 데이터 블록들을 검색할 수 있다.
- 관리하기가 단순해짐
- MSSM: Manual Segment Space Management
- ASSM: Automatic Segment Space Managment
Extent
의 사이즈는 무한정으로 설정할수 없다. 한 개의 Object가 지닐 수 있는 Extent
의 사이즈는 한계가 정해져 있으며, 이는 두 가지 타입으로 나뉜다.
- Soft Limit
- Hard Limit
-
Recommended Block Size (KB)
soft Limit Hard Limit 2 100 4 200 8 300
-
Segment
에 데이터를 저장할 공간이 부족할 때에는Data Block
단위가 아닌Extent
단위로 공간을 확장한다. -
한개의
Segment
는 하나의Tablespace
에 대응된다. 이는 아래의 그림처럼 한개의 Segment가 여러 Tablespace 에 존재할 수 없다는 것을 의미한다.