Search

[OracleDB] OracleDB의 논리적 저장 단위(tablespace, segment, extent, data block)

Last update: @1/31/2023

논리적 구조, 물리적 구조

물리적 구조: 실제 컴퓨터 내부에서 다뤄지는 파일 구조
논리적 구조: 오라클DB에서 데이터를 다루는 개념적 구조

Tablespace, segment, extent, datablock

오라클 내부에서는 데이터 블록(data block), 익스텐트(extent), 세그먼트(segment), 테이블스페이스(tablespace)라는 논리적 단위로 데이터를 관리함

Data block

데이터 블록은 Oracle block이나 페이지(page)등으로도 부름
디스크 상의 여러개의 바이트를 묶은 단위(수 Kb)
운영체제에서 사용하는 데이터 블록 단위의 배수여야 함
블럭 내부는 약 80%까지만 새로운 행으로 채워지고, 나머지 20%는 업데이트를 위해 남겨둠
80%가 찼다면 다시 40%가 될 때까지 새로운 행을 받아들이지 않고, 40% 밑으로 내려가면 다시 새로운 행을 쓰기 시작하

Extent

연속된 블록을 일정 개수만큼 묶어서 특정한 정보를 저장하기 위해 할당된 단위

Segment

익스텐트를 묶어서 특정한 데이터 구조를 저장하기 위해 할당된 단위
한 세그먼트 아래 묶인 익스텐트는 모두 같은 테이블 스페이스에 저장됨
예를 들어 각 테이블의 데이터는 데이터 세그먼트(data segment)에, 인덱스는 인덱스 세그먼트(index segment)에 저장됨
오라클은 세그먼트를 위한 공간을 익스텐트 단위로 할당하기 때문에 만약 기존의 익스텐트가 가득 차면 가득 찬 익스텐트가 속한 세그먼트에 새로운 익스텐트를 할당함
이렇게 익스텐트는 필요할 때 할당되기 때문에 연속적이지 않을 수 있고, 같은 세그먼트 내의 익스텐트라도 다른 파일에 할당될 수도 있음
다만 각각의 익스텐트 자체는 여러 파일에 걸쳐있지는 않음

Tablespace

오라클의 최상위의 논리적 저장 단위로, 하나 이상의 데이터베이스 파일로 이루어져 있음
테이블, 인덱스 등의 객체들로 이루어져 있는데, 이 객체들은 하나의 테이블 스페이스에만 속하지만, 테이블 스페이스가 여러 데이터 파일을 가질 수 있기 때문에, 객체들 역시 여러 데이터베이스 파일에 걸칠 수 있음
데이터베이스와 테이블스페이스의 차이
오라클 데이터베이스는 하나 이상의 테이블스페이스로 이루어져 있음
테이블스페이스와 데이터파일의 차이
테이블스페이스는 하나 이상의 데이터파일로 이루어져 있음
가장 단순한 형태의 데이터베이스는 1개의 데이터파일로 이루어진 1개의 테이블스페이스를 생각해볼 수 있겠고, 그다음 복잡한 형태는 각각 2개의 데이터파일로 이루어진 2개의 테이블스페이스를 생각해볼 수 있겠음(총 4개의 데이터파일)
schema object(테이블 또는 인덱스)를 생성하면 해당 테이블의 세그먼트가 지정된 테이블 스페이스에 생성됨. 즉, 테이블 스페이스를 이루는 하나 이상의 파일들에 걸치거나 걸치지 않고 생성될 수 있음. 하지만 테이블 스페이스 두 개이 상을 걸쳐서 생성되지 않고, 오직 하나의 테이블 스페이스에 속하게 됨

Tablespace의 용도

데이터베이스 데이터를 디스크 어느 공간에 할당할 지 제어(예를 들어 다른 하드에 분산시킨다던가 등)
데이터베이스 유저들에게 특정한 용량을 할당할 때
각각의 테이블스페이스를 온라인하거나 오프라인 시켜서 접근을 제어할 때
일부 데이터베이스만 백업하거나 복구할 때
데이터 스토리지를 여러 장치에 걸쳐서 성능을 향상시킬 때
임시 테이블을 만들고 나중에 없앨 때
읽기 전용 테이블 등을 만들 때

데이터베이스 용량을 늘리는 세 가지 방법

1.
하나의 테이블 스페이스 내에 새로운 데이터파일 생성하기
2.
새로운 테이블스페이스 생성해서 그곳에 데이터베이스 추가하기
3.
데이터파일 크기 자체를 동적으로 늘리기

References

관련 문서