오라클 저장 구조



오라클은 데이터베이스의 모든 데이터에 대해서 논리적 데이터베이스 공간에 할당한다. 위의 그림은 데이터 저장 구조의 관계를 나타내고 있다. 작은 순서부터 큰 순서대로 아래와 같다.


Block < Extent < Segment < Table-space < Database  


블록, Block (= Logical Block, Oracle Block, Page)

블록은 데이터 파일 I/O 의 가장 작은 단위이자 할당될 수 있는 공간의 가장 작은 단위이다. OS 디스크 상의 일정한 Byte 단위의 스페이스를 의미한다. 그리고 오라클 블록은 하나 이상의 연속적인 운영체제 블록으로 이루어져 있다. (OS Block을 한 개 이상 합쳐서 생성되며, DB_BLOCK_SIZE 로 지정) DB_BLOCK_SIZE 파라미터는 CREATE DATABASE 명령어 입력 시 한 번 지정이 되면 그 값은 DB를 다시 생성하기 이전까지 변경할 수 없으며 해당 DB_BLOCK_SIZE 를 Standard Block Size 라고 한다.


블록의 크기는 최소 2KB, 4KB, 8KB, 16KB, 32KB 가 제공되며 짝수로 해당 값을 정하는 것이 권장된다. 여기서 DB_BLOCK_SIZE 값에 설정된 크기를 Standard Block Size 라고 하며, 다른 크기들은 Non-Standard Block Size 라고 한다.


블록의 크키가 크면 한번에 담을 수 있는 데이터 양이 많아서 I/O 를 줄일 수 있지만, 데이터가 적을 경우 공간이 낭비된다는 단점이 존재한다. ( 운영체제에서의 단편화를 생각할 수 있다.



익스텐트, Extent

익스텐트는 여러 연속적인 데이터 블록으로 만들어진 데이터베이스 저장장소 공간 할당의 논리적 단위이다. 하나 이상의 익스텐트가 모여 세그먼트를 이룬다. 세그먼트에서 기존 공간이 완전히 사용되면, 오라클은 세그먼트에 대해 새로운 익스텐트를 할당한다.


익스텐트의 기본 단위는 64K이고 Extent에 데이터를 어디까지 사용했는지를 표시하기 위해 책갈피 역할을 하는 것이 High Water Mark(HWM)이다.  익스텐트를 미리 확보하기 위해 수동으로 할당할 수도 있으며 이 때, 두가지 경우의 수를 생각할 수 있다.

(1) 데이터가 할당해둔 것보다 데이터가 훨씬 더 적게 들어온다면, 비어있는 공간이 많이 생겨 공간 낭비가 심할 수 있다.

(2) 하나의 데이터 파일에 여러 테이블이 저장될 수 있고, 미리 익스텐트를 확보해두면 각 테이블에 데이터의 분산을 막을 수 있다.



세그먼트, Segment

세그먼트는 테이블스페이스 내의 특정 논리적 저장구조에 대한 모든 데이터를 포함하는 익스텐트의 집합이다. 오라클은 각 테이블에 대해 하나 이상의 익스텐트를 할당하여, 그 테이블에 대한 데이터 세그먼트를 형성한다. 인덱스에 대해서는 하나 이상의 익스텐트를 할당하여, 인덱스 세그먼트를 형성한다.


Posted by doubler
,